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

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

X " /> 国产成人一级,精品国产一区二区三区久久久久久,欧美一级在线看

四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

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

對(duì)于靜態(tài)頁(yè)面還有Etag。

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

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

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

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

搜索引擎之所以喜歡靜態(tài)文件是因?yàn)橛羞@兩個(gè)標(biāo)識(shí),可以判斷文件是否更新過(guò)

二、php等動(dòng)態(tài)頁(yè)面

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

三、緩存控制的具體含義

先解釋一下本人經(jīng)過(guò)測(cè)試?yán)斫獾倪@幾個(gè)標(biāo)簽的含義

Cache-Control:指定請(qǐng)求和響應(yīng)遵循的緩存機(jī)制。在請(qǐng)求消息或響應(yīng)消息中設(shè)置Cache-Control并不會(huì)修改另一個(gè)消息處理過(guò)程中的緩存處理過(guò)程。請(qǐng)求時(shí)的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,響應(yīng)消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。

各個(gè)消息中的指令含義如下:

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

Private指示對(duì)于單個(gè)用戶的整個(gè)或部分響應(yīng)消息,不能被共享緩存處理。這允許服務(wù)器僅僅描述當(dāng)用戶的部分響應(yīng)消息,此響應(yīng)消息對(duì)于其他用戶的請(qǐng)求無(wú)效。

no-cache指示請(qǐng)求或響應(yīng)消息不能緩存

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

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

min-fresh指示客戶機(jī)可以接收響應(yīng)時(shí)間小于當(dāng)前時(shí)間加上指定時(shí)間的響應(yīng)。

max-stale指示客戶機(jī)可以接收超出超時(shí)期間的響應(yīng)消息。如果指定max-stale消息的值,那么客戶機(jī)可以接收超出超時(shí)期指定值之內(nèi)的響應(yīng)消息。

php用法:

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

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

max-age=8表示最大生存期8秒,超過(guò)8秒瀏覽器必須去服務(wù)器重新讀取,這個(gè)時(shí)間是以用戶的讀取頁(yè)面開(kāi)始計(jì)時(shí)的,而Expires是絕對(duì)時(shí)間。

Expires:緩存過(guò)期的絕對(duì)時(shí)間,如果過(guò)了它指定的那個(gè)時(shí)間點(diǎn),瀏覽器就不認(rèn)緩存了,要去服務(wù)器重新請(qǐng)求一份最新的。

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

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

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

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

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

四、HOW ?

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

php頁(yè)面:

這里分兩種:

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

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

2 經(jīng)常改動(dòng)的頁(yè)面

類似bbs,論壇程序,這種頁(yè)面更新速度比較快,緩存的主要作用是防止用戶頻繁刷新列表,導(dǎo)致服務(wù)器數(shù)據(jù)庫(kù)負(fù)擔(dān),既要保證更新的及時(shí)性,也要保證緩存能被利用

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

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

五 額外

1 刷新,轉(zhuǎn)到,強(qiáng)制刷新的區(qū)別

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

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

刷新(F5):這種刷新也是根據(jù)緩存是否有Last-Modified來(lái)決定,如果有會(huì)轉(zhuǎn)入304或1024(php),如果沒(méi)有最后更新時(shí)間那么去服務(wù)器讀取,返回真實(shí)文檔大小

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

XML/HTML代碼
復(fù)制代碼 代碼如下:
Cache-Control: no-cache

2 調(diào)試工具

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

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

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

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

主站蜘蛛池模板: 恶搞之家拍脏片八季是哪一集 | 欧美gv网站| 为奴12年| 小镇姑娘电影高清观看| 奇妙的植物世界阅读短文答案| 嗯啊主人| 皮皮电影| 电影双妻艳史| 美人计电影国语免费观看| 高天妮| 麻美由真电影| 炖鲫鱼汤怎么做好喝又营养视频| 环太平洋豆瓣| 命运简谱| 狐仙 电影| 光脚踩| 雪中悍刀行第一季演员表| 风俗通| 香港毛片免费看| 张静初的三级未删减版| 电影《德拉夫人》在线观看| 睡前搞笑故事| 最新好看电影| 漆黑意志| 我的兴趣爱好| 原千岁电影| 1988年英国的白蛇传说| 《人奶魔劫》电影在线播放| 精品视频| 拔萝卜电影| 误杀2电影免费观看高清完整版| 《密爱》| 电影疯狂| 魅力学院电影| julia taylor| 中华战士| 隐形变异作风问题清单及整改措施 | 张猛龙魏碑字帖大全| 布鲁克战队| 红旗车驾驶员个人主要事迹材料 | 爱的替身|