2012-03-16 7 views
15

を無視していると私はXHRリクエストを行うたびに、私は要求を置く次のヘッダーを取得していることに気づい:はjQueryのXmlHttpRequestののCache-Control私はGoogleのクロムを使用してい

Cache-Control: no-cache 
Pragma: no-cache 

あなたがで仕様を読めばhttp://www.w3.org/TR/XMLHttpRequest/それは、ユーザエージェントはHTTPキャッシュを実装している場合、それは作者のリクエストヘッダに(: ノーキャッシュキャッシュをバイパスしていないなどのCache-Control)を のCache-Controlヘッダを尊重する必要があり、次の

言います。エンドユーザが明示的に(ページをリロードするなどして)そのような動作を に要求しない限り、Cache-ControlまたはPragma リクエストヘッダを自動的に送信してはなりません。

まあ、私は次のことをしようとしている:

$.ajax(myUrl, { 
    type: 'get', 
    dataType: 'json' 
    cache: true, 
    headers: { 
     'Cache-Control': 'max-age=200' 
    } 
    }) 

あなたは私が明示的に私のリソースのキャッシュされたコピーを得ることを期待してのCache-Controlヘッダを設定しています見ることができるように。さて、ChromeはCache-Controlヘッダーを無視しているようです。

XHRリクエストを行うときにCache-Control: no-cacheヘッダーを送信できないことはありますか?

答えて

46

これは間違いだった。私は開発者ツールを "キャッシュを無効にする"ように設定しました。そのため、常にキャッシュ制御ヘッダーを追加していました。これが起こった場合は、ボックスがチェックされていないことを確認してください。

ラウル

+1

はい、Firebugには "Net"メニューの "Disable Browser Cache"もあります。私もこれに噛まれてしまった。 – harpo

+0

キャッシュコントロールヘッダーがサーバーによって正しく設定されていても、ネイティブfetch()がキャッシュからデータを返さない理由を調べようとしています。この見落としを修正するのを手伝ってくれてありがとう、それは私を怒らせていました。 –

+0

私はこれを追跡するのにとても長い時間をかけました。ありがとうございました! –

3

私はちょうどそれをテストし、あなたのコードは、カンマがないことを除いてうまく動作します。その後、

オープンネットワーク]タブ、このページのコンソールでこれを試してみてください。

$.ajax('http://stackoverflow.com/', { 
    type: 'get', 
    dataType: 'json', 
    cache: true, 
    headers: { 
     'Cache-Control': 'max-age=123' 
    } 
}) 

は、再びネットワーク]タブを確認してくださいあなただけ行われた要求をクリックして、「ヘッダ」タブをクリックします。あなたが提供したCache-Controlヘッダでリクエストが送信されたことがわかります。

+0

うん、申し訳ありません。それは私自身の責任でした。私はキャッシングが無効になっていないことを確認するために開発者ツールをチェックしておくべきでした。 – HaxElit

関連する問題