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