14

HTTPS リクエストで If-Modified-Since ヘッダーを送信するように Firefox (重要な場合は 3.0.1) を説得するにはどうすればよいですか? リクエストがプレーンHTTPを使用し、サーバーがそれを忠実に尊重する場合、ヘッダーを送信します。しかし、代わりに HTTPS を使用して同じサーバーから同じリソースを要求すると (つまり、単に URL の http:// を https:// に変更すると)、Firefox は If-Modified-Since ヘッダーをまったく送信しません。この動作は SSL 仕様または何かによって義務付けられていますか?

以下は、ライブ HTTP ヘッダー Firefox 拡張機能を使用してプルされた HTTP および HTTPS 要求/応答のペアの例です。太字でいくつかの違いがあります。

HTTP リクエスト/レスポンス:

http://myserver.com:30000/scripts/site.js

GET /scripts/site.js HTTP/1.1
ホスト: myserver.com:30000
ユーザーエージェント: Mozilla/5.0 (...) Gecko/2008070206 Firefox/3.0.1
受け入れる: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
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
接続: キープアライブ
If-Modified-Since: 2008 年 8 月 19 日(火)15:57:30 GMT
If-None-Match: "a0501d1-300a-454d22526ae80"-gzip
キャッシュ制御: max-age=0

HTTP/1.x 304 は変更されていません
日付: 2008 年 8 月 19 日 (火) 15:59:23 GMT
サーバー: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8
接続: キープアライブ
キープアライブ: タイムアウト = 5、最大 = 99
Etag: "a0501d1-300a-454d22526ae80"-gzip

HTTPS リクエスト/レスポンス:

https://myserver.com:30001/scripts/site.js

GET /scripts/site.js HTTP/1.1
ホスト: myserver.com:30001
ユーザーエージェント: Mozilla/5.0 (...) Gecko/2008070206 Firefox/3.0.1
受け入れる: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
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/1.x 200 OK
日付: 2008 年 8 月 19 日 (火) 16:00:14 GMT
サーバー: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8
最終更新日: 2008 年 8 月 19 日 (火) 15:57:30 GMT
Etag: "a0501d1-300a-454d22526ae80"-gzip
Accept-Ranges: バイト
コンテンツ エンコーディング: gzip
コンテンツの長さ: 3766
キープアライブ: タイムアウト = 5、最大 = 100
接続: キープアライブ
コンテンツタイプ: text/javascript

更新: browser.cache.disk_cache_ssltrue に設定するとうまくいきました (Nickolay が指摘しているように、メモリ キャッシュがまだ残っているため、これは奇妙です)。応答に「Cache-control: public」ヘッダーを追加することもできました。ありがとう!

4

2 に答える 2

14

HTTPS リクエストはキャッシュされないため、If-Modified-Since を送信しても意味がありません。キャッシュしないことは、セキュリティ上の予防措置です。

ディスクにキャッシュしないことはセキュリティ上の注意事項ですが、実際にIf-Modified-Since の動作に影響しているようです (コードをざっと見てください)。

Firefox の設定 (about:config) でbrowser.cache.disk_cache_ssltrueに設定してみてください。問題が解決しない場合は、応答でCache-Control: publicヘッダーを送信してみてください。


更新: Gecko 2.0 (Firefox 4) でFirefox の動作が変更されました -- HTTPS コンテンツがキャッシュされるようになりました。

于 2008-08-19T16:51:42.157 に答える
2

HTTPS リクエストはキャッシュされないため、If-Modified-Sinceを送信しても意味がありません。キャッシュしないことは、セキュリティ上の予防措置です。

于 2008-08-19T16:12:00.897 に答える