我正在用PHP编写一个用于Cache-Control标头的小包装器。在我致力于特定实现之前,我想直接了解一些细节。
我知道所有的指令和它们的作用,但似乎其中一些可能会发生冲突。我假设如果存在no-cache
,则不应存在其他Cache-Control指令(并且不设置Pragma: no-cache
,因为它实际上是请求标头)。
s-maxage
的存在是否意味着public
? private
指令应删除public
以及s-maxage
。以这种方式设置no-store
,no-transform
,must-revalidate
或proxy-revalidate
是否有任何警告?还有其他指令相互冲突吗?
并且no-cache
和该团伙会与任何非缓存控制指令冲突,例如Expires
等?
答案 0 :(得分:1)
根据我的经验,即使你在理论上得到所有缓存头和指令,浏览器和代理是否按照它们被告知是另一回事。我不认为有一种方法可以测试(这很痛苦)。特别是有这么多的平板电脑和移动设备。 http://www.procata.com/cachetest/可能会有所帮助。我不知道可靠的缓存测试框架。
然后在HTTP 1.0和HTTP 1.1指令之间存在某种混淆。通常,存在向后兼容性(但也应该进行测试)。我会考虑完全忽略HTTP 1.0指令( Pragma:No-cache 和 Expires )并专注于HTTP 1.1。
在http://palisade.plynt.com/issues/2008Jul/cache-control-attributes/中解释了缓存指令的层次结构。你的一些问题在那里得到解答。
答案 1 :(得分:0)
我建议看看
http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p6-cache-17.html
如果没有回答,则将反馈发送给HTTPbis工作组。