我正在寻找一个试图使用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; }
BalusC.. 24
If-Modified-Since
只有当客户端已经拥有一个资源以及一个响应时,该请求才有意义,该响应具有Last-Modified
与允许浏览器缓存(如a Cache-Control
和/或Pragma
包含值)的标头相结合的标头public
.
此外,我注意到一些浏览器不包括If-Modified-Since
原始响应还包含ETag
标头.而浏览器将If-None-Match
用于测试它.
Web作者和Web主人的缓存教程
@symc:与一些旧代理结合使用时仍然非常有效.除了我之外,如何提及可能会对OP的具体问题产生负面影响:)有一个糟糕的一天? (10认同)
alienhard.. 11
首先,您必须确保首先缓存初始响应(我在另一个相关问题中回答了这个问题.
尝试设置以下字段:
Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT Expires: -1 Cache-Control: must-revalidate, private
Last-Modified
需要作为验证器(ETag
如果你想测试,不要发送If-Modified-Since
)
Expires -1
告诉资源是陈旧的,必须始终重新验证
Cache-Control
不得包含no-cache或no-store
当您在初始HTTP/200
响应上发送这些标头时,在后续请求中,浏览器应发送包含If-Modified-Since
标头的条件请求.
If-Modified-Since
只有当客户端已经拥有一个资源以及一个响应时,该请求才有意义,该响应具有Last-Modified
与允许浏览器缓存(如a Cache-Control
和/或Pragma
包含值)的标头相结合的标头public
.
此外,我注意到一些浏览器不包括If-Modified-Since
原始响应还包含ETag
标头.而浏览器将If-None-Match
用于测试它.
Web作者和Web主人的缓存教程
首先,您必须确保首先缓存初始响应(我在另一个相关问题中回答了这个问题.
尝试设置以下字段:
Last-Modified: Wed, 16 Feb 2011 13:52:26 GMT Expires: -1 Cache-Control: must-revalidate, private
Last-Modified
需要作为验证器(ETag
如果你想测试,不要发送If-Modified-Since
)
Expires -1
告诉资源是陈旧的,必须始终重新验证
Cache-Control
不得包含no-cache或no-store
当您在初始HTTP/200
响应上发送这些标头时,在后续请求中,浏览器应发送包含If-Modified-Since
标头的条件请求.