0

ubuntu 12.04 システム apache2 で実行していて、応答ヘッダーをいじっています。http 応答ヘッダー、特に Content-Length ヘッダーの動作を変更したいと考えています。apache2.conf の IfModule mod_headers.c セクションに次の行を追加しようとましcurl -iを実行すると、Content-Length が正しく計算されます。 RFC2616 のセクション 9.4 では、HEAD リクエストは GET リクエストに応答して送信される情報と同一である必要があると説明されています。 誰かが私にこの振る舞いを説明できますか?!

Header set Static-Header "Static Content with nonsense"
Header set Content-Length "1338"




4

1 に答える 1

0

Apache2 は、実際にコンテンツを配信するときに、常に最初から content-length を計算します。PHP を使用してそのヘッダーを変更すると、同じ動作が発生します。これは、Content-Length が、サーバーが圧縮 (mod_deflate がアクティブな場合) などを適用した後に送信されるコンテンツの長さと一致することを確認するために必要です。

このため、コンテンツを送信するすべてのリクエストで、そのヘッダーへの変更は無効になります。しかし、Apache は head-request のコンテンツ (メタデータのみ) を調べないため、コンテンツの長さを計算しません。これは有効です。HEAD リクエストには本文がないため、content-length は常にゼロです。

したがって、次のことを行う必要があります:
a) そもそも content-length ヘッダーを変更し
ない b) HEAD リクエストに対して送信しない

于 2013-11-03T17:20:04.417 に答える