14

ローカルキャッシュから応答が返されるのを検出する方法があるかどうか疑問に思っていますか?出来ますか?

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

4

3 に答える 3

10

答えは日付ヘッダーです

  • 日付ヘッダーが送信日より前の場合、応答はキャッシュから送信されます。
  • 日付ヘッダーが要求が送信された日付より後の場合、応答は新鮮です。

例えば

  • キャッシュから:リクエストは11:00に送信され、応答日は10:59です。
  • キャッシュなし:リクエストは11:00に送信され、応答日は11:01です。
于 2013-04-16T15:48:26.803 に答える
1

onreadystatechange関数で返されるステータスコードが304(変更されていない)であるかどうかを確認します。次のようなもの:

xmlhttp.onreadystatechange=function()
{
  if (xmlhttp.readyState==4 && xmlhttp.status==304)
    {
      alert("Cached");
    }
} 
于 2012-10-11T00:37:21.900 に答える
1

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

それをサポートするブラウザを扱っている限り、それは他のものよりも良い解決策のように思えます。

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

于 2016-12-20T18:39:13.223 に答える