5

私はnet/httpパッケージを使用してGOで小さな実験的なhttpサーバーを作成していますが、すべての応答に「ID」転送エンコーディングが必要です。ただし、GOのhttpサーバーは、常に「チャンク」転送を使用して応答を返します。GOのHTTPサーバーでチャンクエンコーディングを無効にする方法はありますか?

4

1 に答える 1

2

「Transfer-Encoding: identity」で応答することが仕様の下で有効かどうかは明確ではありません (省略した方がよいと思います) が、...

ここでコードを調べると、WriteHeader(code int) 関数内に次のように表示されます (少し奇妙ですが、この関数は実際にはすべてのヘッダーをソケットにフラッシュします)。

367     } else if hasCL {
368         w.contentLength = contentLength
369         w.header.Del("Transfer-Encoding")
370     } else if w.req.ProtoAtLeast(1, 1) {
371         // HTTP/1.1 or greater: use chunked transfer encoding
372         // to avoid closing the connection at EOF.
373         // TODO: this blows away any custom or stacked Transfer-Encoding they
374         // might have set.  Deal with that as need arises once we have a valid
375         // use case.
376         w.chunking = true
377         w.header.Set("Transfer-Encoding", "chunked")
378     } else {

上記の最初の行の「hasCL」は、コンテンツの長さが利用可能であることを示していると思います。利用可能な場合は、"Transfer-Encoding" ヘッダーを完全に削除します。それ以外の場合、バージョンが 1.1 以降の場合は、"Transfer-Encoding" をチャンクに設定します。これはソケットに書き込む直前に行われるため、現在のところ変更する方法はないと思います。

于 2013-01-14T21:50:17.810 に答える