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 中国語 Web サイトの他の関連記事を参照してください。