2012-08-30 15 views
10

私はExpressJSのいくつかの奇妙な動作を経験しています。私のnode.js/expressベースのURLへの2回目のリクエストでは、常にIEに304 Not Modifiedレスポンスコードを返します。他のブラウザは200(Chrome/FF)になります。問題は、たとえ内容が実際に変更されたとしても304を返すということです。私は検索しようとしたが、トピックで何も見つかりませんでした。また、IEとChromeのリクエストヘッダーに違いがあるのを見つけようとしましたが、それを引き起こす可能性のあるヘッダーが見付かることがありました。どんな助けもありがとう。私は、接続を追加する必要がexpressはIEの繰り返し要求に対して304を返します

はSSLを経由、場合には、それは

+0

IEのレスポンスコードはどのようにして決定されますか? – josh3736

+0

+1私は同じ問題があります! – Erik

+0

josh3736、私はIE Developer Toolsのネットワークログをチェックしています – bbbonthemoon

答えて

2

まあが重要、私はのCache-Controlヘッダ回避策であるのCache-Controlヘッダに

+0

これはもっと回避策です。うまくいけば、誰かが解決策を投稿できます。 – Brad

3

を追加することによって、それを修正するために管理しました。バグはInternet ExplorerのヘッダーのHTTP 1.1仕様の解釈にあります。

私はこの問題を解決したルートハンドラにこれを追加しました。 Last-ModifiedまたはETagヘッダーが必要ですが、Expressは既にそれを私に送信していました。

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

参照:Make IE to cache resources but always revalidate

4

私の周りに多くのことを見て同じ問題を抱えて、それが実際に問題がIEの要請を得るアヤックスの愚かな積極的なキャッシュから来ることになります。実際にこの304が表示されたときに、実際の要求はサーバーにヒットしませんが、IEはキャッシュからの最新のデータで応答します。これはMSの意図した動作であり、回避策のみがあります。

私の好みは、各ajax get要求に現在の時刻を含む無駄なクエリパラメータを添付することです。これは、IEが常にサーバーから取得するように強制します。素敵な部分は、あなたがjQueryのを使用している場合、あなたは

$.ajaxSetup({cache:false}) 

もう一つの仕事は周りの代わりにGETのPOSTリクエストを使用することですし、この自動的にそれを設定することもできますが、これは常にオプションではありません。

関連する問題