php – 如何测试“If-Modified-Since”HTTP Header支持

前端之家收集整理的这篇文章主要介绍了php – 如何测试“If-Modified-Since”HTTP Header支持前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用 PHP,如何准确测试一个远程网站是否支持“If-Modified-Since”HTTP头.

从我读过的文件中,如果从头部请求中指定的日期起,GET的远程文件已被修改,它将返回200 OK状态.如果没有被修改,它应该返回304未修改.

所以我的问题是,如果服务器不支持“If-Modified-Since”但仍然返回200 OK?

那里有几个工具检查你的网站是否支持“If-Modified-Since”,所以我想我在问他们如何工作.

编辑:

我使用Curl进行了一些测试,发送以下内容;

curl_setopt($ch,CURLOPT_HTTPHEADER,array("If-Modified-Since: ".gmdate('D,d M Y H:i:s \G\M\T',time()+60*60*60*60)));
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,CURLOPT_MAXREDIRS,5);
curl_setopt($ch,CURLOPT_HEADER,CURLOPT_NOBODY,CURLOPT_AUTOREFERER,CURLOPT_FORBID_REUSE,CURLOPT_CONNECTTIMEOUT,4);
curl_setopt($ch,CURLOPT_TIMEOUT,4);

即将来google.com的日期返回;

HTTP/1.0 304 Not Modified
Date: Fri,05 Feb 2010 16:11:54 GMT
Server: gws
X-XSS-Protection: 0
X-Cache: MISS from .
Via: 1.0 .:80 (squid)
Connection: close

如果我发

curl_setopt($ch,time()-60*60*60*60)));
curl_setopt($ch,4);

即过去的日期,google.com返回;

HTTP/1.0 200 OK
Date: Fri,05 Feb 2010 16:09:12 GMT
Expires: -1
Cache-Control: private,max-age=0
Content-Type: text/html; charset=ISO-8859-1
Server: gws
X-XSS-Protection: 0
X-Cache: MISS from .
Via: 1.0 .:80 (squid)
Connection: close

如果我发送两个bbc.co.uk(不支持它);

未来一回

HTTP/1.1 200 OK
Date: Fri,05 Feb 2010 16:12:51 GMT
Server: Apache
Set-Cookie: BBC-UID=84bb66bc648318e367bdca3ad1d48cf627005b54f090f211a2182074b4ed92c40ForbSoft%20Web%20Diagnostics%20%28URL%20Validator%29; expires=Tue,04-Feb-14 16:12:51 GMT; path=/; domain=bbc.co.uk;
Accept-Ranges: bytes
Cache-Control: max-age=0
Expires: Fri,05 Feb 2010 16:12:51 GMT
Pragma: no-cache
Content-Length: 111677
Content-Type: text/html

过去的日期返回;

HTTP/1.1 200 OK
Date: Fri,05 Feb 2010 16:14:01 GMT
Server: Apache
Set-Cookie: BBC-UID=841b66ec44232cd91e81e88a014a3c5e50ed4e20c0e07174c4ff59675cd2fa210ForbSoft%20Web%20Diagnostics%20%28URL%20Validator%29; expires=Tue,04-Feb-14 16:14:01 GMT; path=/; domain=bbc.co.uk;
Accept-Ranges: bytes
Cache-Control: max-age=0
Expires: Fri,05 Feb 2010 16:14:01 GMT
Pragma: no-cache
Content-Length: 111672
Content-Type: text/html

所以我的问题依然存在.

我已经进行了一些测试,它似乎工作如下;

如果您发送一个If-Modified-Since头文件,其日期过去是当前时间之前的5分钟,那么google.com,w3.org,mattcutts.com等网站将返回一个“HTTP /1.1304未修改标题.网站如yahoo.com,bbc.co.uk和stackoverflow.com总是返回“HTTP / 1.1 200 OK”.

“Last-Modified”标题与“If-Modified-Since”无关,因为发回“HTTP / 1.1 304 Not Modified”标题的全部要点是您不必发送正文从而节省带宽 – 这是背后的整体点).

因此,我的问题的答案是,如果发送“If-Modified-Since 5 minutess ago”标题时,如果一个站点没有返回“HTTP / 1.1 304 Not Modified”标题,则该站点不支持“ If-Modified-Since“请求正确.

如果我不正确,请说,并提供测试显示.

编辑:我忘了补充说,一个很好的测试是向域(例如w3.org)发出正常的HEAD请求,获取“上次修改”日期,然后使用“If-Modified-Since:”进行另一个请求.这将测试是否支持“上次修改”值和“If-Modified-Since”请求.请注意:只是因为服务器发回“最后修改”日期并不意味着它支持“If-Modified-Since”

猜你在找的PHP相关文章