11

ExpressJS の奇妙な動作が発生しています。node.js/express ベースの API URL への 2 回目のリクエストでは、常に 304 Not Modified レスポンス コードが IE に返されます。他のブラウザーは 200 (Chrome/FF) を取得します。問題は、コンテンツが実際に変更されていても 304 を返すことです。検索しようとしましたが、トピックに関するものは何も見つかりませんでした。また、IE と Chrome のリクエスト ヘッダーの違いを見つけようとしましたが、それを引き起こす可能性のあるヘッダーを確認できました。どんな助けでも大歓迎です。

問題が発生した場合に備えて、SSL経由で接続することを追加する必要があります

4

3 に答える 3

6

Cache-Control ヘッダー回避策です。バグは、Internet Explorer によるヘッダーの HTTP 1.1 仕様の解釈にあります。

これをルートハンドラーに追加して、問題を解決しました。Last-Modifiedorヘッダーも必要ですETagが、エクスプレスはすでにそれを送信してくれました。

res.setHeader("Expires", "-1");
res.setHeader("Cache-Control", "must-revalidate, private");

参照: IE を作成してリソースをキャッシュするが、常に再検証する

于 2013-01-10T06:16:55.727 に答える
5

同じ問題を抱えている私はよく見回しますが、実際には、問題はIEによるajaxgetリクエストの愚かな積極的なキャッシングに起因していることがわかります。実際、この304を見ると、実際のリクエストがサーバーにヒットすることはありませんが、IEはキャッシュからの最新データで応答します。これはMSによる意図された動作であるため、回避策のみがあります。

私の好みは、各ajax getリクエストに、現在の時刻を含む役に立たないクエリパラメータを添付することです。IEは常にサーバーから取得するように強制されます。良い点は、jQueryを使用する場合、これに自動的に構成できることです。

$.ajaxSetup({cache:false})

別の回避策は、GETの代わりにPOSTリクエストを使用することですが、これは常にオプションであるとは限りません。

于 2013-01-11T10:32:57.037 に答える
3

さて、私はCache-Controlヘッダーを追加することでそれを修正することができました

于 2012-08-31T20:31:13.850 に答える