9

私はAngularサービスを使用して、残りのAPIを介してリソースをGETしています。サーバーはETagヘッダーに何らかの値を設定Cache-Control: no-cacheし、その応答にも設定します。

これは Firefox を使用すると期待どおりに動作しますが、Chrome を使用して同じアプリにアクセスすると、If-None-Match. Mac と Ubuntu ボックスの両方で現在の Chrome dev チャンネルと安定チャンネルを試してみましたが、両方で同じでしたが、Firefox はIf-None-Match正しく追加されていました。

現在、条件付きでフェッチされる他の非 xhr/静的リソースがあり、それらのすべてのリクエストは正しく304 NOT MODIFIED応答を取得します。

If-None-MatchChrome がXHR リクエストに対してのみヘッダーを送信しない理由について、さらに詳しい情報を得るためにできることはありますか?

4

1 に答える 1

6

Chrome で HTTPS 経由で Ajax クエリを発行している場合、API サーバーで自己署名証明書を使用するなどの証明書エラーにより、応答がキャッシュされません。これは設計によるものと思われます。

明らかにChrome の欠陥 が存在していましたが、Webkit で修正され、2010 年頃に Chromium / Chrome になりました。

別の質問では、jQuery の ifModified: true および cache: true オプションを使用して、If-Modified-Since および If-None-Match ヘッダーを手動で設定することをお勧めします。残念ながら、これは、自己署名証明書を使用してサーバーからの HTTPS 応答をキャッシュしないという Chrome の意図した動作を上書きしません。

有効な署名付き SSL 証明書を使用してサーバーでテストすると、問題が解決しました。Chrome は、デフォルトの jQuery AJAX メソッドを使用して、テキスト/html コンテンツに対して予想どおり 304 を受け取りました。

于 2013-11-20T17:08:12.580 に答える