当一件奇怪的事情发生时,我正在玩php,使用etag,如果没有匹配的话,等等。我写了下面的代码,用来检查是否没有匹配的代码。如果它匹配我的etag,我发送一个304响应头。如果没有,我会发送其他邮件头,告诉浏览器缓存页面,并将ETag与它们一起缓存。
我原以为能得到一页,然后一直得到304页。相反,我只得到一页,然后是304页,然后是304页,等等。
当我检查chrome的头视图时,我发现如果我没有在304代码中再次设置etag,它不会在下次我得到页面时将其发送回请求头中。
这是正常行为还是只是铬合金?我做错什么了吗?
代码如下:

<?php
    $etag = '89453fo245tyu5o423ty5349gu0p34';

    if (isset($_SERVER['HTTP_IF_NONE_MATCH']) &&
                                  $_SERVER['HTTP_IF_NONE_MATCH'] == $etag) {
         header('', true, 304);
    } else {
         header('Expires: Fri, 06 Apr 2013 23:59:59 03:00 GMT');
         header('Pragma: cache');
         header('Cache-Control: public, must-revalidate, max-age=0');
         header('ETag: ' . $etag);
         echo 'new page';
    }

最佳答案

我想问题出在你的头球。使用正确的头调用,as mention in this answer一切都应该正常:

header('HTTP/1.1 304 Not Modified');

还要记住,如果按F5刷新页面,浏览器可能会忽略缓存并直接转到Web服务器。要进行测试,我将添加到同一页的链接,或者单击浏览器地址栏并按回车键。

关于php - 我是否必须再次发送带有304 Not Modified header 的ETag?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15773214/

10-09 07:36