10

Firebugによると、リソースが最初に取得されたときの応答ヘッダーは次のとおりです。

Accept-Ranges   bytes
Cache-Control   public, max-age=86400
Content-Language    en
Content-Length  232
Content-Location    http://localhost/myapp/cacheTest.html
Content-Type    text/html; charset=WINDOWS-1252
Date    Wed, 05 Sep 2012 15:59:31 GMT
Last-Modified   Tue, 01 May 2012 05:00:00 GMT
Server  Restlet-Framework/2.0.3
Vary    Accept-Charset, Accept-Encoding, Accept-Language, Accept

クリックして戻ってクリックすると、サーバーに送信されるリクエストヘッダーは次のとおりです。

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-us,en;q=0.5
Connection  keep-alive
Host    localhost
Referer http://localhost/myapp/cacheTest2.html
User-Agent  Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0

したがって、当然、サーバーは私が望むように304を送信できず、代わりにリソース全体を再度送信します。

これはFirefox14で発生していましたが、バグの可能性があると思ったので、アップグレードしました。しかし、それはFirefox15でもまだ起こっています。Chromeには問題はありません。

「Expires」ヘッダーがある場合とない場合の両方を試しましたが、違いはありません。Firefoxは、If-Modified-Sinceヘッダーの送信を拒否するだけです。

4

4 に答える 4

40

さて、私はばかみたいに感じますが、私のプライドを脇に置くことにしました。そして、この質問を単に削除するのではなく、他の誰かが同じことをした場合の解決策を教えてください...

昔々、何かをテストするために、Firefoxでのキャッシュをオフにしていました。オンに戻したところ、ヘッダーが送信されています。

于 2012-09-05T16:29:18.917 に答える
5

私にとって、問題は、私が送信した応答の日付が正確にRFC1123ではなかったことであることが判明しましたLast-Modified。Chromeは気にしませんでした。If-Modified-Since不正な形式のタイムスタンプがヘッダーに返送されました。しかし、Firefoxは静かにそれを無視しました。

あなたのヘッダーから、これがあなたの場合の理由ではなかったことがわかりますが、これが問題であることに気付くのに時間がかかったので、とにかくこの回答を投稿します。同じ問題。

これはLinux、FWIW(正確にはMint 17)の下にありますが、両方のブラウザーが他のOSの下でも同じように動作することを期待しています。

于 2014-11-18T11:58:56.263 に答える
2

私の場合、アドレスバーからサイトを読み込んだときに、Firefox(ESR 60.4.0)が一部のリソース(CSS、JSなど)の「 If-Modified-Since」または「If-None-Match 」ヘッダーを送信していませんでした。

ただし、「ctrl + r」でリロードを要求すると、両方のヘッダーが送信されていましたが、リソースは「304Notmodified」を返す必要があったとしても「200OK」でリロードされました

追跡したところ、apache2.4.25deflateモジュールが原因であることがわかりました。リソースが圧縮されている場合、それらは事実上キャッシュされません(つまり、次のアクセス時に再ロードされます)。さらに詳しく調べてみると、deflateを使用する際のETag処理が原因であることがわかります。

したがって、私にとって最も合理的な恨みは「FileETag None」を使用することでしたが、「ctrl-r」を実行すると、圧縮されたドキュメントでも「304」が正しく取得されるようになりました。

驚くべきことに、その後も緑色の「200 OK」が表示され、CSSとJSの完全な取得を示しています(詳細な「リクエストヘッダー」パネルに「If-Modified-Since」はありません)。時々偽造されます(「転送済み」と呼ばれる別の列があり、バイト数ではなく「キャッシュ」と表示されている場合、Firefoxはネットワークの「200OK」リクエストからではなく、実際に内部キャッシュから値を取得したことを意味します。チェック中サーバー側のaccess_logは、その時点でネットワークアクティビティがないことを確認したため、その部分はUIが悪いだけです)

于 2019-01-30T03:23:07.690 に答える
0

Firefoxがリクエストをキャッシュしない原因となる可能性があるもう1つの理由は、ディスクがいっぱいの場合です。少なくともOSXでは。

その時点でのsafariはまだリクエストを適切にキャッシュし、firefoxは少なくともリクエストをメモリにキャッシュできるため、これは非常に不可解です。

キャッシュをクリアし、ディスクにいくらかのスペースを作ると役立ちます。

于 2016-11-04T14:14:04.980 に答える