語法:
向客戶端傳送原始的http報頭
需注意:
header函式必須在任何實際的輸出前呼叫,無論是一般的
html
標籤、檔案中空行,或者來自
php。就是在這個函式之前不能有任何形式的輸出。
引數說明:
引數描述
string
必需。規定要傳送的報頭字串。
replace
可選。指示該報頭是否替換之前的報頭,或新增第二個報頭。
預設是 true
(替換)。
false
(允許相同型別的多個報頭)。
可選。把 http
響應**強制為指定的值。(
php 4
以及更高版本可用)
常見用法例項:
1.傳送伺服器狀態碼
常用狀態碼
狀態碼說明
100-199
表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程
200-299
成功接收請求,並已完成整個處理過程,常用200
300-399
未完成請求,客戶端需要進一步細化請求,比如,請求的資源已經移動到乙個新的位址,常用302,304
400-499
客戶端請求有誤 常用404
500-599
伺服器端出現錯誤,常用500
2.頁面跳轉
header("location: ");
header("refresh:3;url=");
3s後跳轉
3.設定瀏覽器快取
強制瀏覽器不進行快取!
//header("expires:-1");
header("expires: mon, 26 jul 1997 05:00:00 gmt");
header("cache-control:no-cache,must-revalidate");
header("pragma:no-cache");
header("last-modified: ". date("d, j m y h:i:s t") );
說明:expires後的時間必須是
gmt格式的 如gmdate("m d y h:i:s");
cache-control常見的取值有private
、no-cache
、max-age
、must-revalidate
等,預設為
private
。其作用根據不同的重新瀏覽方式分為以下幾種情況。
cache-directive
說明public
所有內容都將被快取
private
內容只快取到私有快取中
no-cache
所有內容都不會被快取
no-store
所有內容都不會被快取到快取或 internet
臨時檔案中
must-revalidation/proxy-revalidation
如果快取的內容失效,請求必須傳送到伺服器/
**以進行重新驗證
max-age=*** (*** is numeric)
快取的內容將在 ***
秒後失效
, 這個選項只在
可用,
並如果和
last-modified
一起使用時
, 優先順序較高
1.開啟新視窗
如果指定cache-control
的值為private
、no-cache
、must-revalidate,
那麼開啟新視窗訪問時都會重新訪問伺服器。而如果指定了
max-age
值,那麼在此值內的時間就不會重新訪問伺服器,如:
header(「cache-control:max-age=5」);
表示當訪問此網頁後的5
秒內不會再次訪問伺服器
2.在位址列回車
如果值為private或
must-revalidate,
則只有第一次訪問時會訪問伺服器,以後就不在訪問。如果值為
no-cache
,那麼每次都會訪問。如果值為
max-age
,則在過期之前不會重複訪問。
3.按後退按鈕
如果值為private
、must-revalidate
、max-age
,則不會重訪問,而如果為
no-cache
,則每次都重複訪問
4.按重新整理按鈕
無論何值,都會重複訪問
當指定cache-control
值為「no-cache
」時,訪問此頁面不會在
internet
臨時文章夾留下頁面備份。
另外,通過指定「expires
」值也會影響到快取。例如,指定
expires
expires: fri, 31 dec 1999 16:00:00 gmt
5.關於"last-modified
在瀏覽器第一次請求某乙個url
時,伺服器端的返回狀態會是
200,內容是你請求的資源,同時有乙個
last-modified
的屬性標記此檔案在服務期端最後被修改的時間,格式類似這樣:
last-modified: fri, 12 may 2006 18:53:33 gmt
客戶端第二次請求此url
時,根據
協議的規定,瀏覽器會向伺服器傳送
if-modified-since
報頭,詢問該時間之後檔案是否有被修改過:
if-modified-since: fri, 12 may 2006 18:53:33 gmt
如果伺服器端的資源沒有變化,則自動返回 http 304
(not changed.
)狀態碼,內容為空,這樣就節省了傳輸資料量。當伺服器端**發生改變或者重啟伺服器時,則重新發出資源,返回和第一次請求時類似。從而保證不向客戶端重**出資源,也保證當伺服器有變化時,客戶端能夠得到最新的資源。
last-modified提高效能
聰明的開發者會把last-modified
和etags
請求的http
報頭一起使用,這樣可利用客戶端(例如瀏覽器)的快取。因為伺服器首先產生
last-modified/etag
標記,伺服器可在稍後使用它來判斷頁面是否已經被修改。本質上,客戶端通過將該記號傳回伺服器要求伺服器驗證其(客戶端)快取。
過程如下:
1 客戶端請求乙個頁面(a)。
2 伺服器返回頁面a
,並在給
a加上乙個
last-modified。
3 客戶端展現該頁面,並將頁面連同last-modified
一起快取。
4 客戶再次請求頁面a
,並將上次請求時伺服器返回的
last-modified
一起傳遞給伺服器。
5 伺服器檢查該last-modified
,並判斷出該頁面自上次客戶端請求之後還未被修改,直接返回響應
304和乙個空的響應體。
檔案
//we'll be outputting a pdf
//it will be called downloaded.pdf
header('content-disposition: attachment; filename="downloaded.pdf"');
//the pdf source is in 1.pdf
readfile('1.pdf');
一般header(「accept-ranges:bytes」);//
依位元組返回
header(「content-disposition:attachement;filename=』 檔名』」);
header(「accept-length:」.$filesize);
其實要更好的了解這些,還是得去好好學習http協議啊!
PHP header 函式及其常見使用
向客戶端傳送原始的http報頭 需注意 header函式必須在任何實際的輸出前呼叫,無論是一般的html標籤 檔案中空行,或者來自php。就是在這個函式之前不能有任何形式的輸出。引數 描述string 必需。規定要傳送的報頭字串。replace 可選。指示該報頭是否替換之前的報頭,或新增第二個報頭。...
php header函式常見用途
header函式在php中是傳送一些頭部資訊的,我們可以直接使用它來做301跳轉等,下面我來總結關於header函式用法與一些常用見問題解決方法。傳送乙個原始 http 標頭 http header 到客戶端。標頭 header 是伺服器以 http 協義傳 html 資料到瀏覽器前所送出的字串,在...
php header函式常見用途
header函式在php中是傳送一些頭部資訊的,我們可以直接使用它來做301跳轉等,下面我來總結關於header函式用法與一些常用見問題解決方法。傳送乙個原始 http 標頭 http header 到客戶端。標頭 header 是伺服器以 http 協義傳 html 資料到瀏覽器前所送出的字串,在...