2012-10-11 8 views
8

ローカルキャッシュから応答が返されたときを検出する方法があるのでしょうか?出来ますか?XHRがキャッシュされたリソースを返すときを検出する方法?

ソリューションは一般的で無条件要求に対応する必要があります。この場合、応答コードは常に200 OKですが、XHRは2番目のリクエストのキャッシュされたリソースを返します(たとえば、最初のレスポンスにはExpiresヘッダーが含まれているため、有効期限前にサーバーに新しいリソースを問い合わせる必要はありません)。

+0

発音できません。どのように応答にタイムスタンプを追加するのですか? –

+0

わかりませんが、Chromeデベロッパーツールで情報を表示できます。 (Firebug for FF、レスポンスヘッダー:キャッシュから) – filip26

答えて

5

は、答えは日付ヘッダが送信日前である場合、レスポンスがキャッシュから来ているDateヘッダ

  • です。
  • 要求が送信された日付ヘッダーが日付の後にある場合、応答は新鮮です。

キャッシュから

  • :要求が応答日が午前10時59
  • キャッシュなしで、11:00に送られた:要求が11時に送信された、応答日はどうやら11:01
+0

これはもちろん、Chrome拡張機能でのみ動作します。 –

+0

@RichBradshaw私は一般的な解決策を見つけました。答えが更新されます。 – filip26

0

返されるステータスコードがonreadystatechange関数で304(変更されていない)かどうかを確認してください。線に沿って何か:

xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==304) 
    { 
     alert("Cached"); 
    } 
} 
+0

@ kmb385ありがとうございますが、このソリューションは条件付きリクエストの場合にのみ機能します(If - *、If-Modified-Since、If-None-Matchなど)と私は一般的な解決策を探しています。質問が更新されました。 – filip26

1

ですResource Timing APIを使用して、ブラウザのキャッシュから何かが提供されたかどうかを判断することもできます。 transferSizeが0の場合(encodedBodySizeが> 0の場合)、キャッシュヒットになります。

あなたがa browser that supports itを扱っている限り、それは他のものより良い解決策のようです。

参照:https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming/transferSize

関連する問題