簡體   English   中英

PHP緩存控制的概念

[英]concept of PHP Cache Control

我讀過有關PHP緩存控制的文章。

他們講述了概念和編碼,但我仍然無法理解:

在哪里放這些代碼? 把它放在所有頁面? 在我的PHP文件的最開始? 我想知道瀏覽器會緩存整個HTML代碼嗎?

我看到很多關於Cache正在使用圖像文件,css文件的例子。 但是,如果我想在圖像文件上添加標題,這是否意味着我需要做一個url重寫來首先將圖像文件請求引導到php文件中?

我假設你的意思是關於瀏覽器緩存的緩存。 如果是這樣,您需要知道的是瀏覽器會跟蹤您下載的每個文件。 一旦您第二次訪問某個頁面,您的瀏覽器會首先檢查您嘗試下載的文件(即圖像或CSS文件)是否已在您的計算機上,並且尚未在網站上進行過編輯第一次和第二次訪問。

如果要實現瀏覽器緩存,可以使用一些HTTP標頭來控制用戶瀏覽器如何執行給定文件的驗證和緩存。 你可以使用這樣的東西:

header("Expires: Mon, 1 Jan 2000 00:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache"); 

這將強制瀏覽器不緩存文件。 我正在展示您所獲得的相反版本,以了解為什么瀏覽器在給定具有特定標頭的文件時的行為。 第一行將通過設置較舊的日期告訴瀏覽器您當前訪問的文件已經過期。 如果您將來將日期更改為一個,您將獲得相反的功能。

接下來,第二行允許腳本告訴瀏覽器上次編輯用戶嘗試訪問的文件的時間。 如果您在網絡上的文件中的最后修改日期早於您計算機上的文件(來自您第一次訪問時下載的文件),那么您的瀏覽器將再次下載該文件,假設自上次訪問后該文件已更改。

第三行有助於解釋一些瀏覽器(以及某些代理)在下載文件時的行為方式。 這里有不同的選擇,你可以看到他們都在這里

最后一個類似於前一個,但對於舊系統。 這是一個正確的解釋

否則,還有另一種選擇,但與PHP沒有任何關系:您可以配置您的服務器應用程序來為您處理緩存控制標頭(如果您使用PHP我假設Apache或Nginx)所以您不需要重寫所有內容或將其傳遞給PHP文件。

如果你正在使用Apache,你可以在.htaccess文件中使用這樣的東西:

# 480 weeks 
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"> 
Header set Cache-Control "max-age=290304000, public" 
</FilesMatch>   

或者,如果您使用的是Nginx,則在處理您網站的配置部分中,您可以添加:

location ~* \.(css|js|gif|jpe?g|png)$ { 
expires 168h; 
add_header Pragma public; 
add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 
}

暫無
暫無

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

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