Go에서 청크 HTTP 응답 스트리밍
문제 설명:
Go HTTP를 구현할 때 청크 단위로 응답을 보내는 서버는 청크를 보내는 대신 지정된 기간이 끝나면 일관되게 모든 청크를 전달합니다. 점차적으로. 또한 Go는 콘텐츠가 미리 알려지지 않은 경우에도 0보다 큰 값을 가진 Content-Length 헤더를 자동으로 포함합니다.
해결책:
증분을 활성화하려면 청크를 보내고 Content-Length 헤더를 조기에 설정하지 않으려면 다음을 따르십시오. 단계:
예제 코드:
package main import ( "fmt" "log" "net/http" "time" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { flusher, ok := w.(http.Flusher) if !ok { panic("expected http.ResponseWriter to be an http.Flusher") } w.Header().Set("X-Content-Type-Options", "nosniff") for i := 1; i <= 10; i++ { fmt.Fprintf(w, "Chunk #%d\n", i) flusher.Flush() time.Sleep(500 * time.Millisecond) } }) log.Print("Listening on localhost:8080") log.Fatal(http.ListenAndServe(":8080", nil)) }
확인:
Telnet을 사용하여 서버를 테스트하면 청크가 전송되는 것으로 표시됩니다. 점진적으로:
$ telnet localhost 8080 Trying ::1... Connected to localhost. Escape character is '^]'. GET / HTTP/1.1 HTTP/1.1 200 OK Date: Tue, 02 Jun 2015 18:16:38 GMT Content-Type: text/plain; charset=utf-8 Transfer-Encoding: chunked 9 Chunk #1 9 Chunk #2 ...
위 내용은 Go에서 청크된 HTTP 응답을 점진적으로 스트리밍하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!