检查网站是否已从HTTP标头启用缓存

时间:2016-02-13 17:35:43

标签: php html http-headers browser-cache

我正在使用以下代码获取网站的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 
)

我怎么知道这个网站是否启用了浏览器缓存?

2 个答案:

答案 0 :(得分:1)

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

发送与缓存(Cache-ControlEtagExpires相关的正确标头的

Here is an example of a 200 response仅举几例。

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/

答案 1 :(得分:0)

缓存的相关标头是Cache-Control和Expires(see sec 14.9.1 of RFC 2616

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

  

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

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