在Go 中串流分塊HTTP 回應
問題陳述:
問題陳述:實作HTTP時發送分塊回應的伺服器,伺服器在指定持續時間結束時一致地傳遞所有區塊而不是發送它們逐漸地。此外,即使事先不知道內容,Go 也會自動包含值大於零的 Content-Length 標頭。
解決方案:擁抱刷新:要將每個區塊寫入回應流後立即刷新,請使用 http.ResponseWriter.Flush()。這將觸發分塊編碼並發送區塊,而無需等待回應完成。
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 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 ...使用Telnet 測試測試:使用Telnet 測試測試區塊增量:
以上是如何在 Go 中增量傳輸分塊 HTTP 回應?的詳細內容。更多資訊請關注PHP中文網其他相關文章!