如何测试If-Modified-Since标头是否正常

时间:2018-12-11 12:36:52

标签: php http-headers

我有一些代码要测试以查看其是否正常运行。

由于标头工作正常,如何测试是否已修改?

$headers = getallheaders();
$time = Carbon::createFromTimestamp(filemtime($location), 'Europe/Amsterdam');
$md = md5($time->timestamp);

if(isset($headers['If-Modified-Since'])) {
    $carbon = Carbon::createFromFormat('D, d M Y H:i:s \G\M\T', $headers['If-Modified-Since'], 'Etc/GMT+0');
    if($carbon->gt($time)) { 
        header('HTTP/1.1 304 Not Modified');
        exit;
    }
}
if(isset($headers['If-None-Match']) && !Request::isRefresh() && !Request::isPost() && !Request::isAjax()) {
    $trim = trim($headers['If-None-Match']);
    if(($trim == "\"$md\"" || $trim == "$md" || $trim == "'$md'")) {
        header('HTTP/1.1 304 Not Modified');
        exit;
    }
}
$fp = fopen($location, 'rb');
expireHeader();
header("Etag: $md");
header("Content-Type: ".getMimeType($location));
header("Content-Length: " . filesize($location));

fpassthru($fp);
exit;

1 个答案:

答案 0 :(得分:0)

通过在浏览器中使用XMLHttpRequest对象并添加自己的标头,您可以测试响应是否正常工作。

xmlhttp=new XMLHttpRequest();
xmlhttp.addEventListener('load', function() {
   console.log(this.status);
});
xmlhttp.open("get", location.href);
xmlhttp.setRequestHeader("If-Modified-Since", "Wed, 16 Mar 2019 13:00:00 GMT");
xmlhttp.send();

通过修改要测试的文件的将来日期或过去的日期,您将收到响应200(表明文件自给定日期以来已被修改)或304未修改的响应。

您当然可以编写单元测试,但出于实用性考虑并快速检查响应是否是您需要的,这样可以正常工作。