은 우리가 HTTP 요청을 처리하는 기능, 같은 있다고 가정 :HTTP ResponseWriter의 쓰기 함수 버퍼가 Go에 있습니까?
func handler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("first piece of data"))
// do something
w.Write([]byte("second piece of data"))
}
내가 궁금하네요을 w.Write()에 대한 첫 번째 호출은 클라이언트에 플러시인지 아닌지가?
플러시되면 클라이언트에 실제로 두 번 응답합니다. 두 번째 호출하기 전에 Content-Length
을 어떻게 결정할 수 있습니까?
플러시되지 않으면 (데이터가 로컬로 버퍼 됨) 첫 번째 호출에서 방대한 양의 데이터를 쓰면 어떻게 될까요? (스택 오버플로가됩니까?)
모든 설명을 이해할 수 있습니다! :)
HTTP 트레일러는 Go의'net/http' 서버와 클라이언트 구현에서 모두 지원됩니다. 그리고 아니요, 읽기 시간 제한이없는 클라이언트는 하루 종일 지속되지 않습니다. HTTP의 서버 출력 버퍼링 전략은 HTTP 및 예와 전혀 관련이 없습니다. OS 버퍼는 HTTP에 TCP 소켓 인 소켓에 버퍼링합니다. 당신은 다른 사람들의 대답을 강타하려고 너무 열심히 노력하고 있습니다. – thwd
[예 그들은 있습니다] (https://golang.org/src/pkg/net/http/transfer.go#L32), 앞으로 귀하의 의견을 무시하겠습니다. – thwd
[주석 달기를 중단하십시오.] (https://golang.org/src/pkg/net/http/response.go#L253) – thwd