2016-08-12 4 views
1

私はノードjs Webアプリケーションで作業していますが、dbをアドレス指定してクエリーを介してデータを取得するhttp get要求を行っています。ノードjsでhttpを取得するreqestからキャッシュを削除する方法

http get要求はChromeで問題なく動作していますが、IEではgetは更新されずに何らかのキャッシュから返されます。これにより、dbクエリの結果は更新されません(chacheから取得されます)。

私はそれはIEでchacheフォームF12開発者ツールから取られていることがわかります。以下

enter image description here

私のコード。私は、私のようなものを追加する必要があることを知っている:私の要求に

res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 

を私は、私は多分...まだchacheから取られ得るreuqest beacuse間違った場所にこのラインを入れて、私に悪い結果をもたらすと思い

クライアント

$http.get('/users') 

.success(function(data) { 
    $scope.usersNumber = data.length; 

}) 
.error(function(data) { 
    console.log('Error: ' + data); 
}); 

サーバー

app.get('/users', function(req, res){ 
    get_user(req, res); 
}); 

var get_user= function(req, res){ 

    var query= User_session.find(); 
    query.exec(function(err, docs){ 
     res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 

     res.json(docs); 
     //mongoose.connection.close(); 

    }); 

} 

答えて

1

は、あなたのヒードに最大エージングを追加してみてくださいr:

Cache-Control:private, no-cache, no-store, must-revalidate, max-age=0 
Pragma:no-cache 

開発者ツールから取得したレスポンスは、応答がキャッシュから選択されたことを示しています。キャッシュされたレスポンスには、レスポンスがキャッシュから選択され、失効したとみなされない期間を指定するexpiresヘッダーがあります。

あなたはエンドツーエンドのリロード要求がHTTP/1.0クライアントとの 互換性のために、「キャッシュなし」のキャッシュ制御ディレクティブまたはを含ん

ためのキャッシュなしのディレクティブを含めるようにしたいと思います、 "プラグマ:no-cache"フィールド名 は、要求にno-cacheディレクティブを含めてはいけません(MUST NOT)。 サーバは、そのような要求に応答するときにキャッシュされたコピーを使用してはならない(MUST NOT)。

参考:https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

また、クライアントのリロードを強制するために、この別の解決策を試すことができます。 URLにクエリ文字列パラメータを追加します。 例:/ usersをお持ちの場合は、代わりに/ usersと入力してください。uniqstamp = <タイムスタンプ>

お使いのブラウザでは、クエリ文字列を含むパス全体がURLとみなされます。あなたはいつも新鮮な200のokを得るでしょう。タイムスタンプが常にユニークであるように、使用するタイムスタンプがミリ秒単位のjavascriptの時刻にあることを確認してください。

+0

ありがとう、試しましたが、まだチャチから結果が得られています – Matoy

+0

HTTP/1.0クライアントのプラグマ:no-cacheで更新しました。 – randominstanceOfLivingThing

+0

それは機能しましたか?キャッシングを防ぐためのもう1つの手法も追加しました。 – randominstanceOfLivingThing

関連する問題