簡體   English   中英

PHP的緩存控制設置不起作用

[英]php cache-control setting not working

我的標頭中具有以下功能

function header_alter($file)
{
    $timestamp=filemtime($file);
    $tsstring = gmdate('D, d M Y H:i:s ', $timestamp) . 'GMT';
    $etag = $timestamp;
    $if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false;
    $if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? $_SERVER['HTTP_IF_NONE_MATCH'] : false;
    if ((($if_none_match && $if_none_match == $etag) || (!$if_none_match)) &&
        ($if_modified_since && $if_modified_since == $tsstring))
    {
        $arr[] = 'HTTP/1.1 304 Not Modified';       
    }
    else
    {
        $arr[] = "Last-Modified: $tsstring";
        $arr[] = "ETag: \"{$etag}\"";
    }
    $arr[] = "Cache-Control: max-age=3600";
    $arr[] = 'Expires: ' . date('D, d M Y H:i:s', time() + (3600)) . ' GMT';
    return $arr;
}

但是當我使用以下代碼查看標題時

foreach (getallheaders() as $name => $value) {
    echo "$name: $value\n";
}

Host: localhost
Connection: keep-alive
**Cache-Control: max-age=0**
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
If-None-Match: "1387557104"
If-Modified-Since: Fri, 19 Dec 2013 16:31:44 GMT

緩存控件未更新。 謝謝幫忙。

我們可以使用Cache-Control:max-age =…通知瀏覽器該組件在定義的時間內不會更改。 這樣,如果瀏覽器的緩存中已經包含該組件,我們就可以避免不必要的進一步請求,因此可以更快地執行已准備好緩存的頁面視圖。 現代瀏覽器即使使用任何啟發式方法也可以緩存靜態文件,即使沒有任何緩存控制標頭,但如果我們隱式定義緩存頭,它們將更加有效。

對於Apache2,您可以使用mod_expires啟用max-age:

ExpiresActive On
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"

對於Lighttpd,有mod_expire模塊。
在server.modules部分中啟用它:

server.modules = (
...
"mod_expire",
...
)

然后為包含靜態文件的目錄添加以下指令:

$HTTP["url"] =~ "^/images/" {
expire.url = ( "" => "access 30 days" )
}

可以使用ngx_http_headers_module啟用Nginx服務器的最大壽命。

現在,Web服務器發送靜態文件的緩存頭:Cache-Control:max-age = 2592000

在設計變更的情況下,我們應避免使用瀏覽器緩存中過時的內容。 這可以通過將文件版本添加到文件名來完成:script.js-> script1.js-> script2.js-> ...等

緩存控制:當我們輸出HTML時,最大使用率也很有用。 想象一下由PHP生成的頁面變化不那么頻繁,每天一次甚至更長的時間。 但是瀏覽器仍然必須在每個頁面視圖中下載HTML。 我們可以通過在PHP中發送max-age值來改進它。

header('Cache-Control: max-age=28800');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM