> 백엔드 개발 > Golang > Go에서는 본문이 포함된 HTTP 요청의 클라이언트 취소를 어떻게 처리할 수 있나요?

Go에서는 본문이 포함된 HTTP 요청의 클라이언트 취소를 어떻게 처리할 수 있나요?

Mary-Kate Olsen
풀어 주다: 2024-12-07 00:50:11
원래의
878명이 탐색했습니다.

How Can Go Handle Client Cancellations in HTTP Requests with Bodies?

Go에서 HTTP 요청 본문을 사용한 클라이언트 취소

HTTP 요청을 처리할 때 클라이언트 취소 신호에 정상적으로 응답할 수 있는 것이 중요합니다. 자원 관리. Go의 컨텍스트 패키지는 취소를 캡처하는 메커니즘을 제공하지만 특정 시나리오에서는 예상대로 작동하지 않을 수 있습니다.

GET 요청과 POST 요청이 다른 이유

GET 간의 동작 차이 POST 요청은 HTTP에서 요청을 처리하는 방식에서 비롯됩니다.

  • GET: GET 요청에는 요청 본문이 없으므로 서버가 즉시 요청 처리를 시작할 수 있습니다.
  • POST: POST 요청에는 요청 본문이 있으며, 서버는 요청 본문을 처리하기 전에 전체 본문을 수신할 때까지 기다려야 합니다. request.

요청 본문으로 취소 캡처

본문이 있는 요청에 대한 취소 신호를 캡처하려면 요청 본문을 즉시 읽기 시작하는 것이 중요합니다. Go의 http 서버는 애플리케이션이 요청 본문을 읽을 때만 닫힌 연결을 확인합니다.

해결책:

취소 신호가 최대한 빨리 캡처되도록 하려면 요청 본문 읽기를 즉시 시작하는 요청 핸들러:

func handler(w http.ResponseWriter, r *http.Request) {
    go func(done <-chan struct{}) {
        <-done
        fmt.Println("message", "client connection has gone away, request got cancelled")
    }(r.Context().Done())

    io.Copy(ioutil.Discard, r.Body) // Read the body to detect closed connections
    time.Sleep(30 * time.Second)
    fmt.Fprintf(w, "Hi there, I love %s!\n", r.URL.Path[1:])
}
로그인 후 복사

이 솔루션은 요청 본문 읽기를 시작하고 닫힌 연결을 확인합니다. 동시에 요청 유형에 관계없이 취소 신호 캡처가 가능합니다.

위 내용은 Go에서는 본문이 포함된 HTTP 요청의 클라이언트 취소를 어떻게 처리할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿