PHP标头-位置重定向似乎丢失缓存

PHP标头-位置重定向似乎丢失缓存,php,caching,browser,redirect,header,Php,Caching,Browser,Redirect,Header,在将请求重定向到不同的主机之前,我正在对文件的响应代码进行一些cURL检查,以确保在重定向之前文件存在 当我们都高兴时,我将它们从服务器发送到远程主机,我们都高兴 唯一的问题似乎是它没有缓存在用户的机器上。我可以做些什么让用户浏览器知道这是同一个文件吗?我认为它天生就知道,因为它只是一个标题位置重定向,即标题位置:http://www.locationtogo.com/asda?242'; 谢谢你的帮助 ----更新----- 在这方面似乎有不少问题,;所以让我一步一步地解释 用户从handle

在将请求重定向到不同的主机之前,我正在对文件的响应代码进行一些cURL检查,以确保在重定向之前文件存在

当我们都高兴时,我将它们从服务器发送到远程主机,我们都高兴

唯一的问题似乎是它没有缓存在用户的机器上。我可以做些什么让用户浏览器知道这是同一个文件吗?我认为它天生就知道,因为它只是一个标题位置重定向,即标题位置:http://www.locationtogo.com/asda?242';

谢谢你的帮助

----更新-----

在这方面似乎有不少问题,;所以让我一步一步地解释

用户从handler.php请求文件 php执行cURL检查,以查看响应代码是否正确 如果响应代码为200,则我正在重定向到该文件 但是每次为同一个文件重新加载handler.php时。。。它将重新加载整个文件 我现在意识到了——愚蠢的错误——但我会在这里列出,以防万一有人有同样的经历——我当然是在寻找答案200,而不是200或304


现在正在缓存。

默认情况下,PHP和apache不会缓存PHP文件。我最近自己也遇到了这个问题。但是,如果需要,您可以返回304,这将解决问题。我是用etags做的

只要在第一次访问etag哈希时发送浏览器即可

header('Etag: '.$eTagHash);
然后,检查etag是否存在,如果存在,告诉浏览器它是未修改的

if(isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
    if(trim($_SERVER['HTTP_IF_NONE_MATCH']) == trim($eTagHash)){
       header("HTTP/1.1 304 Not Modified");
       exit;
    }}
您可以将$eTagHash设置为任何您想要的值。您应该像大多数人一样在apache服务器上启用ETag

如果您需要重定向到其他地方,只需更改etag哈希,当它不匹配时,您可以使用新值再次向浏览器发送标题etag

您需要添加一个缓存控件或Expires头以及重定向,以指示它可以被缓存

例如,这将允许浏览器将响应缓存一小时

header('Cache-Control: max-age=3600')

我不太清楚问题出在哪里。什么不是缓存在哪里,而是发生了什么?请重新阅读您的问题。对我来说,尤其是最后一部分是不清楚的。谁缓存了什么,什么不缓存?应该缓存什么?什么不应该被缓存?什么是相同的?听起来好像不一样?我现在已经整理好了——这是我自己的错误。我希望这也可以一步一步地解决这个问题。这适用于缓存脚本的输出。不是重定向。重定向需要302状态代码。这假定他想要发送302代码。他解释说该文件没有缓存。对我来说,这听起来像是他在使用一个HTML文件来重定向而不是标题。如果他使用的是headers缓存,那么就永远不会有问题,因为服务器重定向在响应头中,而不是在HTML正文中,所以无论如何,这个问题都是完全无效的。很明显,他是在询问浏览器的缓存。他使用的是标题重定向,正如我认为它本质上会知道的问题中所述,因为它只是标题位置重定向,即标题位置:;PHP/Apache仍然不会缓存文件,除非您自己返回304。PHP/Apache不需要也不能缓存文件。浏览器将重定向到该位置,并将下载文件本身。Apache/PHP永远不会读取该文件,当然,除非重定向到的文件是同一台服务器。