HTTPS 経由で If-Modified-Since ヘッダーを送信するように Firefox を説得する
質問
Firefox (重要な場合は 3.0.1) に HTTPS リクエストで If-Modified-Since ヘッダーを送信させるにはどうすればよいですか?リクエストがプレーン HTTP を使用し、サーバーがそれを忠実に尊重する場合、ヘッダーが送信されます。しかし、代わりに HTTPS を使用して同じサーバーから同じリソースをリクエストすると (つまり、URL の http:// を https:// に変更するだけ)、Firefox は If-Modified-Since ヘッダーをまったく送信しません。この動作は SSL 仕様か何かによって義務付けられているのでしょうか?
以下に、Live HTTP Headers Firefox 拡張機能を使用してプルされた HTTP および HTTPS リクエスト/レスポンス ペアの例をいくつか示します。一部の相違点は太字で示しています。
HTTP リクエスト/レスポンス:
http://myserver.com:30000/scripts/site.js GET /scripts/site.js HTTP/1.1 Host: myserver.com:30000 User-Agent: Mozilla/5.0 (...) Gecko/2008070206 Firefox/3.0.1 Accept: 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 Keep-Alive: 300 Connection: keep-alive 変更された場合:火曜日、2008年8月19日15:57:30 GMT IF-NONE-MATCH:"A0501D1-300A-454D22526AE80" -GZIPキャッシュコントロール:最大年齢=0 HTTP/1.x 304 Not Modified Date: Tue, 19 Aug 2008 15:59:23 GMT Server: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8 Connection: Keep-Alive Keep-Alive: timeout=5, max=99 Etag: "a0501d1-300a-454d22526ae80"-gzip
HTTPS リクエスト/レスポンス:
https://myserver.com:30001/scripts/site.js GET /scripts/site.js HTTP/1.1 Host: myserver.com:30001 User-Agent: Mozilla/5.0 (...) Gecko/2008070206 Firefox/3.0.1 Accept: 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 Keep-Alive: 300 Connection: keep-alive HTTP/1.x 200 OK Date: Tue, 19 Aug 2008 16:00:14 GMT Server: Apache/2.2.8 (Unix) mod_ssl/2.2.8 OpenSSL/0.9.8 Last-Modified: Tue, 19 Aug 2008 15:57:30 GMT Etag: "a0501d1-300a-454d22526ae80"-gzip Accept-Ranges: bytes Content-Encoding: gzip Content-Length: 3766 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/javascript
アップデート:設定 browser.cache.disk_cache_ssl
true にするとうまくいきました (Nickolay 氏が指摘しているように、メモリ キャッシュがまだ残っているため、これは奇妙です)。「キャッシュコントロール」の追加:応答の public" ヘッダーも機能しました。ありがとう!
解決
HTTPS リクエストはキャッシュされないため、If-Modified-Since を送信しても意味がありません。キャッシュしないのはセキュリティ上の予防措置です。
キャッシュしないもの ディスク上 はセキュリティ上の予防措置ですが、実際に影響を与えているようです。 変更された場合-以降 動作(コードをざっと見る)。
Firefox の設定を試してください (about:config 内) ブラウザ.キャッシュ.ディスク_キャッシュ_ssl に 真実. 。それが役立つ場合は、送信してみてください キャッシュ制御:公共 応答のヘッダー。
アップデート: Firefox の動作 かわった Gecko 2.0 (Firefox 4) の場合 -- HTTPS コンテンツがキャッシュされるようになりました。
他のヒント
HTTPS リクエストはキャッシュされないため、 変更された場合-以降 意味がありません。キャッシュしないのはセキュリティ上の予防措置です。