如何检测这是否是 ISP/服务器缓存?

如何检测这是否是 ISP/服务器缓存?

在我们开始之前:我是一个菜鸟。

我正在尝试访问 YQL 以获取一些信息。使用 PHP 的 file_get_contents 获取它很简单,但似乎客户端的 ISP 或服务器正在缓存响应。为了说明问题,请尝试加载:

--

刷新该页面几次 - 注意“created”字符串没有改变 - 每次刷新时应该会间隔几秒钟,就像这个测试示例一样:

--

现在我的问题是,这是系统管理员为了缓存东西而玩的某种把戏,还是 ISP 干的什么事?我能绕过它吗?我必须通过 URL 访问 YQL,因为我需要能够解析它。

(系统管理员很难联系到)

提前致谢。


编辑

我已经找到了绕过缓存的方法。您可以随机化字符串并使用下面 @Coops 提到的技巧,也可以使用此处的代码。大多数情况下,您可以通过发送 Pragma: no-cache 标头来跳过缓存,创建上下文并使用它:

// Create a stream
$opts = array(
    'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Pragma: no-cache"
    )
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents('http://example.com');

我仍然无法弄清楚缓存是由系统管理员还是 ISP 配置的。

答案1

您可以从响应中检查一些特定的标头:Age、、、。这些标头的值可以帮助您确定所需的内容。有关详细信息和标头描述,Expires请参阅ETagViaResponsesHTTP 标头列表

例如,Via标头的值可以告诉您从代理收到了响应,而代理可以在其自己的缓存中保存您请求的数据。

相关内容