【问题标题】:Check if website has cache enabled or not from HTTP Headers从 HTTP 标头检查网站是否启用了缓存
【发布时间】:2016-02-13 17:35:42
【问题描述】:

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

我如何从这个标头中知道该网站是否启用了浏览器缓存?

【问题讨论】:

    标签: php html http-headers browser-cache


    【解决方案1】:

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

    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/

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-29
        • 2013-05-22
        • 2011-10-06
        • 2017-09-04
        • 1970-01-01
        相关资源
        最近更新 更多