Apache環境下PHP利用HTTP緩衝協議原理解析及應用分析_php基礎

來源:互聯網
上載者:User
對於靜態頁面還有Etag。

一、先來看第一種情況:apache 靜態頁面

apache發送給用戶端的靜態頁面一般包含Last-Modified和Etag,這兩個標籤的值來自靜態檔案的修改時間和inode。

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

XML/HTML代碼
複製代碼 代碼如下:

Last-Modified: Fri, 26 Jan 2007 01:53:34 GMT
ETag: "3f9f640-318-cb9f8380"

搜尋引擎之所以喜歡靜態檔案是因為有這兩個標識,可以判斷檔案是否更新過

二、PHP等動態網頁面

由於php是動態產生的,它的內容是不能根據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指示響應可被任何緩衝區緩衝。

Private指示對於單個使用者的整個或部分響應訊息,不能被共用快取處理。這允許伺服器僅僅描述當使用者的部分響應訊息,此響應訊息對於其他使用者的請求無效。

no-cache指示請求或響應訊息不能緩衝

no-store用於防止重要的資訊被無意的發布。在請求訊息中發送將使得請求和響應訊息都不使用緩衝。

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

如果是靜態檔案,用戶端會發上來它緩衝裡的時間,apache會來比對,如果發現沒有修改就直接返回一個頭,狀態代碼是304,位元組數非常少,(進階版本還會增加比較Etag來確定檔案是否變化)

2 php動態檔案:

用戶端發上比對時間,php會判斷是否修改,如果修改時間相同,就只會返回1024位元組,至於為什麼返回1024不得而知,如果你的php產生的檔案非常大,它也只返回1024,所以比較省頻寬,用戶端會根據伺服器端發過來的修改時間自動從快取檔案裡顯示。

註:如果沒有Last-Modified頭,Cache-Control和Expires也是可以起作用的,但每次請求要返回真實的檔案位元組數,而不是1024

四、HOW ?

靜態頁面不用去管它了,如果想更好的控制靜態頁面的緩衝,apache有幾個模組可以很好的控制,這裡不討論

php頁面:

這裡分兩種:

1、不經常改動的頁面,類似新聞發布,這類頁面的特點:第一次發布之後會有幾次改動,隨著時間推移基本不會再修改。控制策略應該是:1第一次發布之發送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來控制,根據論壇的發帖的頻率靈活控制max-age。

PHP代碼
複製代碼 代碼如下:

header('Cache-Control: max-age=60');//緩衝一分鐘
header('Last-Modified: '.gmdate('D, d M Y 01:01:01',$time).'GMT');//格林尼治時間,$time是文章的最後更新時間戳記

五 額外

1 重新整理,轉到,強制重新整理的區別

瀏覽器上有重新整理和轉到按鍵,有的瀏覽器支援用ctrl+F5強制重新整理頁面,它們的區別是什嗎?

轉到:使用者點選連結就是轉到,它完全使用緩衝機制,如果有Last-Modified那麼不會和伺服器通訊,用抓包工具可以查看到發送位元組是0byte,如果緩衝到期,那麼它會執行F5重新整理的動作。

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

強制重新整理:完全拋棄緩衝機制,去伺服器讀取最新文檔,向伺服器發送的header如下

XML/HTML代碼
複製代碼 代碼如下:

Cache-Control: no-cache

2 調試工具

查看瀏覽器和伺服器互動比較好的工具是httpwatch pro,現在的版本4.1,支援ie7

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.