Php header 函式及其常見使用

2021-09-24 15:31:37 字數 4411 閱讀 2591

語法:

向客戶端傳送原始的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 資料到瀏覽器前所送出的字串,在...