一、先來看第一種情況:apache 靜態(tài)頁面 apache發(fā)送給客戶端的靜態(tài)頁面一般包含Last-Modified和Etag,這兩個標簽的值來自靜態(tài)文件的修改時間和inode。

下面是截取得apache返回客戶端的頭

X " /> 成人观看视频,高清不卡毛片,国内精品视频在线播放一区

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

Apache環(huán)境下PHP利用HTTP緩存協(xié)議原理解析及應用分析

對于靜態(tài)頁面還有Etag。

一、先來看第一種情況:apache 靜態(tài)頁面

apache發(fā)送給客戶端的靜態(tài)頁面一般包含Last-Modified和Etag,這兩個標簽的值來自靜態(tài)文件的修改時間和inode。

下面是截取得apache返回客戶端的頭

XML/HTML代碼
復制代碼 代碼如下:
Last-Modified: Fri, 26 Jan 2007 01:53:34 GMT
ETag: "3f9f640-318-cb9f8380"

搜索引擎之所以喜歡靜態(tài)文件是因為有這兩個標識,可以判斷文件是否更新過

二、php等動態(tài)頁面

由于php是動態(tài)生成的,它的內容是不能根據php程序的時間來確定最后修改日期,所以默認php返回客戶端的時候補包含任何緩存控制,要想利用好緩存就必須了解緩存機制,和理減少b,s的交互,縮減帶寬流量,減輕服務器負擔...好處多多。

三、緩存控制的具體含義

先解釋一下本人經過測試理解的這幾個標簽的含義

Cache-Control:指定請求和響應遵循的緩存機制。在請求消息或響應消息中設置Cache-Control并不會修改另一個消息處理過程中的緩存處理過程。請求時的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,響應消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。

各個消息中的指令含義如下:

Public指示響應可被任何緩存區(qū)緩存。

Private指示對于單個用戶的整個或部分響應消息,不能被共享緩存處理。這允許服務器僅僅描述當用戶的部分響應消息,此響應消息對于其他用戶的請求無效。

no-cache指示請求或響應消息不能緩存

no-store用于防止重要的信息被無意的發(fā)布。在請求消息中發(fā)送將使得請求和響應消息都不使用緩存。

max-age指示客戶機可以接收生存期不大于指定時間(以秒為單位)的響應。

min-fresh指示客戶機可以接收響應時間小于當前時間加上指定時間的響應。

max-stale指示客戶機可以接收超出超時期間的響應消息。如果指定max-stale消息的值,那么客戶機可以接收超出超時期指定值之內的響應消息。

php用法:

在輸出之前用header(),(如果使用ob_start()可以將header放在程序任意地方)

php代碼
復制代碼 代碼如下:
header('Cache-Control: max-age=8');

max-age=8表示最大生存期8秒,超過8秒瀏覽器必須去服務器重新讀取,這個時間是以用戶的讀取頁面開始計時的,而Expires是絕對時間。

Expires:緩存過期的絕對時間,如果過了它指定的那個時間點,瀏覽器就不認緩存了,要去服務器重新請求一份最新的。

Last-Modified:文檔的最后修改時間,它的妙用就是:1

如果是靜態(tài)文件,客戶端會發(fā)上來它緩存里的時間,apache會來比對,如果發(fā)現(xiàn)沒有修改就直接返回一個頭,狀態(tài)碼是304,字節(jié)數非常少,(高級版本還會增加比較Etag來確定文件是否變化)

2 php動態(tài)文件:

客戶端發(fā)上比對時間,php會判斷是否修改,如果修改時間相同,就只會返回1024字節(jié),至于為什么返回1024不得而知,如果你的php生成的文件非常大,它也只返回1024,所以比較省帶寬,客戶端會根據服務器端發(fā)過來的修改時間自動從緩存文件里顯示。

注:如果沒有Last-Modified頭,Cache-Control和Expires也是可以起作用的,但每次請求要返回真實的文件字節(jié)數,而不是1024

四、HOW ?

靜態(tài)頁面不用去管它了,如果想更好的控制靜態(tài)頁面的緩存,apache有幾個模塊可以很好的控制,這里不討論

php頁面:

這里分兩種:

1、不經常改動的頁面,類似新聞發(fā)布,這類頁面的特點:第一次發(fā)布之后會有幾次改動,隨著時間推移基本不會再修改。控制策略應該是:1第一次發(fā)布之發(fā)送Last-Modified,max-age設定1天,修改過之后更新Last-Modified,max-age時間隨著修改次數正常。這樣似乎比較繁瑣,還要記錄修改次數,也可以預計一下下次可能的修改時間用Expires指定到大概時間過期

php代碼
復制代碼 代碼如下:
//header('Cache-Control: max-age=86400');//緩存一天
header('Expires: Mon, 29 Jan 2007 08:56:01 GMT');//指定過期時間
header('Last-Modified: '.gmdate('D, d M Y 01:01:01',$time).'GMT');//格林尼治時間,$time是文件添加時候的時間戳

2 經常改動的頁面

類似bbs,論壇程序,這種頁面更新速度比較快,緩存的主要作用是防止用戶頻繁刷新列表,導致服務器數據庫負擔,既要保證更新的及時性,也要保證緩存能被利用

這里一般用Cache-Control來控制,根據論壇的發(fā)帖的頻率靈活控制max-age。

php代碼
復制代碼 代碼如下:
header('Cache-Control: max-age=60');//緩存一分鐘
header('Last-Modified: '.gmdate('D, d M Y 01:01:01',$time).'GMT');//格林尼治時間,$time是帖子的最后更新時間戳

五 額外

1 刷新,轉到,強制刷新的區(qū)別

瀏覽器上有刷新和轉到按鍵,有的瀏覽器支持用ctrl+F5強制刷新頁面,它們的區(qū)別是什么?

轉到:用戶點擊鏈接就是轉到,它完全使用緩存機制,如果有Last-Modified那么不會和服務器通訊,用抓包工具可以查看到發(fā)送字節(jié)是0byte,如果緩存過期,那么它會執(zhí)行F5刷新的動作。

刷新(F5):這種刷新也是根據緩存是否有Last-Modified來決定,如果有會轉入304或1024(php),如果沒有最后更新時間那么去服務器讀取,返回真實文檔大小

強制刷新:完全拋棄緩存機制,去服務器讀取最新文檔,向服務器發(fā)送的header如下

XML/HTML代碼
復制代碼 代碼如下:
Cache-Control: no-cache

2 調試工具

查看瀏覽器和服務器交互比較好的工具是httpwatch pro,現(xiàn)在的版本4.1,支持ie7

還有別的代理抓包工具可以分析,http debugging。沒用過,還有tcp抓包工具,2000自帶的NETwork。另外還有tcp抓包工具,2000自帶的NETwork monitor不過不是專門針對http的比較難用。

php技術Apache環(huán)境下PHP利用HTTP緩存協(xié)議原理解析及應用分析,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日韩午夜在线观看 | 精品视频在线观看一区二区三区 | 国色天香一区三区四区小说 | 7799国产精品久久久久99 | 婷婷九月丁香 | 亚洲午夜精品久久久久久成年 | 欧美日本高清一本二本三本 | 最新69成人精品毛片 | 国产乱论 | 国产婷婷一区二区三区 | gogo全球高清人体成人 | 岛国美女全棵写真视频在线观看 | 巨大巨粗巨长的黑吊免费视频 | 亚洲成人伊人网 | 国产成人精选免费视频 | 午夜免费在线 | 久久久窝窝午夜精品 | 九九国产在线视频 | 亚洲性激情 | 色婷婷综合久久久久中文一区二区 | 4hu最新| 欧美一级免费 | 国产码一区二区三区 | 国产精品视频免费观看 | 大杳焦伊人久久综合热 | 91精品视频网 | 成年人激情网 | 国产男女爱视频在线观看 | 小毛片| 精品福利视频第一 | 一区二区三区四区视频在线 | 在线永久免费观看黄网站 | 日本狠狠操 | 女人被爽到呻吟娇喘的视频动态图 | 最近手机中文字幕无吗 | 成人激情综合 | 免费大学生国产在线观看p 免费的成人a视频在线观看 | 91精品福利一区二区 | 欧美亚洲国产日韩 | 国产在线一区二区三区四区 | 国产日韩欧美成人 |