php 浏览器缓存
瀏覽器緩存動態內容,緩存的內容在瀏覽器本地,而內容由web服務器生成,任何一方都不可能完成這一系列過程,他們之間有一種溝通機制,這就是緩存協商.
如何協商
當瀏覽器向web服務器請求內容時,服務器需要告訴瀏覽器那些內容可以被緩存,一旦瀏覽器知道某個內容可以緩存后,下次當瀏覽器需要請求這個內容時,它便不會直接向服務器請求完整內容,而是詢問服務器是否可以使用本地的緩存,服務器在收到瀏覽器的詢問后需要作出過段的回應,是允許瀏覽器使用本地緩存還是將最新內容傳回瀏覽器.
一個test.php
如用ie瀏覽器訪問這個頁面時,返回狀態碼200,連續多次刷新這個頁面,這個頁面并沒有使用本地緩存,也沒有向服務器作出任何表示.打開ie的和這個臨時文件目錄發發現,該緩存文件的"上次修改時間"為無,瀏覽器并不知道這個文件的生成時間或上次修改時間,沒有過期檢查的依據,自然無法使用緩存.
last-modified
當在動態程序添加了last-modified后,瀏覽器請求了該地址,再次刷新該地址會發現請求參數中攜帶了一個if-modified-since.這意味著瀏覽器在詢問服務器:“我請求的內容在這個if-modified-since對應的時間之后是否有過更新”,我們需要檢查動態內容是否有更新,這部分需要動態程序自己來決定.
<?php $modified_timie=$_SERVER['HTTP_IF_MODIFIED_SINCE']; if(strtotime($modified_time)+3600>time()){ header("HTTP/1.1 304"); exit(1); }; ?>另一種協商方法是ETag
它與前面所講的協商方式非常類似,但它沒有采用內容的最后修改時間,而是采用了一串編碼來標記內容,稱為ETag.一個原則是,如果一個內容的ETag沒有變化,那么這個內容也一定沒有更新.
這里不講這個,之后看情況是否補充.
瀏覽器緩存截止期
Expires告訴瀏覽器該內容在何時過期,暗示瀏覽器在該內容過期之前不需要詢問服務器,而直接使用本地緩存即可.
對應靜態內容,web服務器默認情況下不會開啟Expires標記的支持,需要自己去修改配置.
請求頁面
ctrl+f5 它使得網頁及其所有組件直接向web服務器發送請求,并且不使用緩存協商.
f5 它等同于單機瀏覽器的刷新按鈕,它允許瀏覽器在請求中附加表的緩存協商,但不允許瀏覽器直接使用本地緩存,就是說,它能夠讓last_modified發揮效果,對expires無效.
單擊瀏覽器地址欄的轉到按鈕或通過超鏈接 在瀏覽器輸入url后回車等同于這種操作.這幾種方式允許瀏覽器以最少的請求來獲取網頁的數據,瀏覽器對所有沒有過期的內容直接使用本地緩存.
適用于本地的過期時間
header(“Cache-control: max-age=3600”);
當http響應頭同時含有expires和Cache-control時,瀏覽器會優先考慮Cache-control.
其他
在地址欄回車
值為private或must-revalidate則只有第一次訪問時會訪問服務器,以后就不再訪問。
值為no-cache,那么每次都會訪問。
值為max-age,則在過期之前不會重復訪問
按后退按扭
值為private、must-revalidate、max-age,則不會重訪問,
值為no-cache,則每次都重復訪問
其他里的主要還是區分瀏覽器,不同瀏覽器作用不一樣.
歡迎糾正
總結
- 上一篇: linux系统给安卓root权限,安卓手
- 下一篇: php wps 读取word内容,PHP