Go에서 HTTP 요청 본문을 사용한 클라이언트 취소
HTTP 요청을 처리할 때 클라이언트 취소 신호에 정상적으로 응답할 수 있는 것이 중요합니다. 자원 관리. Go의 컨텍스트 패키지는 취소를 캡처하는 메커니즘을 제공하지만 특정 시나리오에서는 예상대로 작동하지 않을 수 있습니다.
GET 요청과 POST 요청이 다른 이유
GET 간의 동작 차이 POST 요청은 HTTP에서 요청을 처리하는 방식에서 비롯됩니다.
요청 본문으로 취소 캡처
본문이 있는 요청에 대한 취소 신호를 캡처하려면 요청 본문을 즉시 읽기 시작하는 것이 중요합니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!