【发布时间】:2014-05-16 16:50:32
【问题描述】:
如果我这样做:
index.php
<?php
header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
header('Expires: 0'); // Proxies.
header("Location: http://apple.com",TRUE,307);
?>
然后将 index.php 替换为没有标头重定向的新内容,浏览器是否可能缓存标头重定向?我知道客户端重定向可能会发生这种情况,但我不确定服务器端重定向是否会发生这种情况。 (它似乎不是基于我的测试,但我想确定一下。
编辑:
看起来我需要进行 307 重定向才能使其不被浏览器缓存。见:http://www.php.net/manual/en/function.header.php#78470
我还添加了缓存控制标头以防止缓存,以防 307 被浏览器缓存。
我的目标是:
- 不应缓存页面。删除标头位置重定向后,不应以任何方式对其进行重定向。
上面的代码能做到这一点吗? (我最初的测试是这样的)
【问题讨论】:
-
您在该响应中发送了哪些缓存控制标头?
-
我没有发送任何东西。我试图完成的目标是只有在我进行应用程序更新时有一个重定向。然后,当应用程序是最新的时,我希望重定向消失。我不希望它以任何方式缓存,它需要在推送代码时立即工作,然后当我删除代码时它不能缓存。
-
嗯,response cacheability 取决于缓存控制。
-
对我来说听起来 307 不会被缓存。你认为我应该放标题以防万一吗?这些标头是什么?
-
“收到的响应带有任何其他状态码(例如状态码 302 和 307)不得在对后续请求的回复中返回除非有缓存控制指令或其他标头( s) 明确允许它。例如,这些包括以下内容: Expires 标头(第 14.21 节); “max-age”、“s-maxage”、“must-revalidate”、“proxy-revalidate”、“public”或“private”缓存控制指令(第 14.9 节)。”