我正在查看一个缓存库,它试图使用请求对象的If-Modified-Since头。问题是这个标题永远不会被设置,它总是空白的,这对我来说是有意义的,因为它是一个请求。
如何强制请求具有If-Modified-Since头?还是我对这件事的看法太离谱了。
这是我指的功能。
public function isNotModified(Request $request)
{
$lastModified = $request->headers->get('If-Modified-Since');
$notModified = false;
if ($etags = $request->getEtags()) {
$notModified = (in_array($this->getEtag(), $etags) || in_array('*', $etags)) && (!$lastModified || $this->headers->get('Last-Modified') == $lastModified);
} elseif ($lastModified) {
$notModified = $lastModified == $this->headers->get('Last-Modified');
}
if ($notModified) {
$this->setNotModified();
}
return $notModified;
}发布于 2011-02-22 17:21:26
只有当客户端已经获得了一个资源,并且响应具有一个If-Modified-Since头和一个允许浏览器缓存(如包含public的Cache-Control和/或Pragma值)的标题的响应时,使用Cache-Control的请求才有意义。
此外,我注意到,当原始响应还包含一个If-Modified-Since头时,有些浏览器不包括ETag。浏览器将使用If-None-Match来测试它。
另请参阅:
发布于 2011-02-22 22:05:06
首先,您必须确保初始响应首先被缓存(我在另一个相关问题中对此进行了已应答 )。
尝试设置以下字段:
Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT
Expires: -1
Cache-Control: must-revalidate, privateLast-Modified作为验证器(如果要测试If-Modified-Since,请不要发送If-Modified-Since)。Expires -1告诉您,资源已陈旧,必须始终重新验证。Cache-Control不能包含无缓存或无存储。当您在初始HTTP/200响应上发送这些标头时,对于后续请求,浏览器应该发送包含If-Modified-Since头的条件请求。
https://stackoverflow.com/questions/5081397
复制相似问题