27

Apachehttpd.confに次の行を追加しました。-

AddOutputFilterByType DEFLATE text/html text/css application/javascript application/x-javascript application/json

スクリプトを含むhtmlファイル(test.html)があります:-

<script type="text/javascript" src="/test.js"></script>

問題は、test.htmlをロードするたびに、test.jsにもHTTPステータス200がロードされることです。

問題は、条件付きGETが満たされないのはなぜですか。

httpd.confの「AddOutputFilterByType」行をコメントアウトすると、Apacheは304を送信します。

httpd.confでAddOutputFilterByTypeを有効にすると、リクエストヘッダーは次のようになります。

ホスト:最適化
ユーザーエージェント:Mozilla / 5.0(Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10)Gecko / 2009042316 Firefox / 3.0.10 GTB5(.NET CLR 3.5.30729)FirePHP / 0.2.4
承認: */*
Accept-Language:en-us、en; q = 0.5
Accept-Encoding:gzip、deflate
Accept-Charset:ISO-8859-1、utf-8; q = 0.7、*; q = 0.7
キープアライブ:300
接続:キープアライブ
リファラー:http://optimize/
クッキー:PHPSESSID = nbq6h0eeahkshkcbc6ctu2j2b4
If-Modified-Since:Tue、19 May 2009 07:06:46 GMT
If-None-Match: "2000000000717f-2c25a-46a3e8dcc2ad8"-gzip
キャッシュ制御:max-age = 0

そして、応答ヘッダーは次のとおりです。

日付:2009年5月22日金曜日07:03:40 GMT
サーバー:Apache / 2.2.9(Win32)PHP / 5.2.6
最終変更日:2009年5月19日火曜日07:06:46 GMT
Etag: "2000000000717f-2c25a-46a3e8dcc2ad8"-gzip
Accept-Ranges:バイト
変更:Accept-エンコーディング
コンテンツエンコーディング:gzip
コンテンツ-長さ:52583
キープアライブ:timeout = 5、max = 98
接続:Keep-Alive
コンテンツタイプ:application / javascript

更新:ETagを無効にすると、正しく機能することに気づきました。私はそれが304を送ることを意味します。

FileETag None

しかし、私は本当にETagをそのままにしておきたいと思っています(iノードの開示の問題があることは知っています)。

4

4 に答える 4

29

これは Apache の既知のバグです。Apache バグ #45023、およびApache 304 etags と mod_deflate の概要を参照してください。

svn から再構築すると問題が解決します。解決策は、「-gzip」を etag に追加した変更を元に戻すことでした。ただし、関連する HTTP コンプライアンスの問題があります。

Apache を再構築できない場合は、バグ レポートに推奨されるランタイム構成の回避策があります。

 RequestHeader  edit "If-None-Match" "^\"(.*)-gzip\"$" "\"$1\""
 Header  edit "ETag" "^\"(.*[^g][^z][^i][^p])\"$" "\"$1-gzip\""
于 2009-07-09T03:52:08.997 に答える
0

HTTP リクエストを操作する (squid) プロキシを使用している可能性がありますか?

于 2009-05-22T09:16:58.243 に答える