2016-02-13 128 views
0

我使用下面的代码来获取网站的HTTP标头。检查网站是否启用缓存或不从HTTP头

<?php 
$url = "http://www.google.com/"; 
$headers = get_headers($url); 
$code = $headers[0]; 
print_r($headers);  
?> 

上面的代码显示输出:

Array ( 
    [0] => HTTP/1.0 302 Found 
    [1] => Cache-Control: private 
    [2] => Content-Type: text/html; charset=UTF-8 
    [3] => Location: http://www.google.co.in/?gfe_rd=cr&ei=6Ge_VvG0JKTv8wekkIegCA 
    [4] => Content-Length: 261 
    [5] => Date: Sat, 13 Feb 2016 17:29:12 GMT 
    [6] => HTTP/1.0 200 OK 
    [7] => Date: Sat, 13 Feb 2016 17:29:12 GMT 
    [8] => Expires: -1 
    [9] => Cache-Control: private, max-age=0 
    [10] => Content-Type: text/html; charset=ISO-8859-1 
    [11] => P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info." 
    [12] => Server: gws 
    [13] => X-XSS-Protection: 1; mode=block 
    [14] => X-Frame-Options: SAMEORIGIN 
    [15] => Set-Cookie: NID=76=ap8f4I3nvVUaV7rYQYL88Un1P5ctbb-SPDcn7Zq1UYXkqb-mcQUD9gtrJsn2v67hUiTVT62xDebimSvxL__EzsQrf9Er_cUP9wnv7NVJcS0FgOEj0enKgzu0o6zKOyBF; expires=Sun, 14-Aug-2016 17:29:12 GMT; path=/; domain=.google.co.in; HttpOnly 
    [16] => Accept-Ranges: none 
    [17] => Vary: Accept-Encoding 
) 

我怎么能知道这个网站是否已经从这个头启用与否浏览器缓存?

回答

1

您已经发布的特定头是302重定向到http://www.google.co.in/?gfe_rd=cr&ei=6Ge_VvG0JKTv8wekkIegCA但它也没有被缓存(在这种情况下很好的理由)由设定为-1max-age=0ExpiresCache-Control头所看到。因此,如果您尝试检测网站是否发送这些缓存标题,那么您可以检查这些缓存标题,但不是所有网站都使用相同的技术,有些使用不正确的标题,因此可能需要检查其中的一些标题。

Here is an example of a 200 response被发送与缓存正确的标题(Cache-ControlEtagExpires仅举几例)。

HTTP/1.1 200 OK 
Content-Encoding: gzip 
Accept-Ranges: bytes 
Cache-Control: max-age=604800 
Content-Type: text/html 
Date: Sat, 13 Feb 2016 18:15:19 GMT 
Etag: "359670651+gzip" 
Expires: Sat, 20 Feb 2016 18:15:19 GMT 
Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT 
Server: ECS (cpm/F9D5) 
Vary: Accept-Encoding 
X-Cache: HIT 
x-ec-custom-error: 1 
Content-Length: 606 

可能也有用:https://www.mnot.net/cache_docs/

0

缓存相关头是Cache-Control和过期(see sec 14.9.1 of RFC 2616

在你上面的例子中,服务器表示它不希望对要缓存的内容(“private,max-age = 0”)。此外,“-1”Expires(这有点不标准,因为“Expires”头意味着包含实际日期)似乎表明内容已经过期。 “私人”本身实际上会表明浏览器可以缓存内容,但没有中间代理服务器。

私人 表示所有或响应消息的一部分是为单个用户并且不能由一个共享缓存进行缓存。这允许源服务器声明 响应的指定部分仅适用于一个用户,而不是其他用户请求的有效响应。私有(非共享)缓存可以缓存响应。

这并不总是直截了当,因为Cache-Control标头中可能包含多个选项,以指示哪些中间服务器可能缓存。