HTTP Headers 中的 HTTP響應(yīng)現(xiàn)在讓我了解一些常見的HTTP Headers中的HTTP響應(yīng)信息,。 在PHP中,,你可以通過 header() 來設(shè)置頭部響應(yīng)信息,。PHP已經(jīng)自動(dòng)發(fā)送了一些必要的頭部信息,如 載入的內(nèi)容,,設(shè)置 cookies 等等… 你可以通過 headers_list() 函數(shù)看到已發(fā)送和將要發(fā)送的頭部信息,。你也可以使用headers_sent()函數(shù)來檢查頭部信息是否已經(jīng)被發(fā)送,。 Cache-Control的定義是:“The Cache-Control general-header field is used to specify directives which MUST be obeyed by all caching mechanisms along the request/response chain.” 其中“caching mechanisms” 包含一些你ISP可能會(huì)用到的 網(wǎng)關(guān)和代理信息。 例如:
“public”意味著這個(gè)響應(yīng)可以被任何人緩存,,“max-age” 則表明了該緩存有效的秒數(shù),。允許你的網(wǎng)站被緩存降大大減少下載時(shí)間和帶寬,同時(shí)也提高的瀏覽器的載入速度,。 也可以通過設(shè)置 “no-cache” 指令來禁止緩存:
Content-Type這個(gè)頭部包含了文檔的”mime-type”。瀏覽器將會(huì)依據(jù)該參數(shù)決定如何對(duì)文檔進(jìn)行解析,。例如,,一個(gè)html頁面(或者有html輸出的php頁面)將會(huì)返回這樣的東西:
‘text’ 是文檔類型,‘html’則是文檔子類型,。 這個(gè)頭部還包括了更多信息,,例如 charset。 如果是一個(gè)圖片,,將會(huì)發(fā)送這樣的響應(yīng):
瀏覽器可以通過mime-type來決定使用外部程序還是自身擴(kuò)展來打開該文檔,。如下的例子降調(diào)用Adobe Reader:
直接載入,Apache通常會(huì)自動(dòng)判斷文檔的mime-type并且添加合適的信息到頭部去,。并且大部分瀏覽器都有一定程度的容錯(cuò),,在頭部未提供或者錯(cuò)誤提供該信息的情況下它會(huì)去自動(dòng)檢測(cè)mime-type。 你可以在這里找到一個(gè)常用mime-type列表,。 在PHP中你可以通過 finfo_file() 來檢測(cè)文件的ime-type,。 Content-Disposition這個(gè)頭部信息將告訴瀏覽器打開一個(gè)文件下載窗口,而不是試圖解析該響應(yīng)的內(nèi)容,。例如:
他會(huì)導(dǎo)致瀏覽器出現(xiàn)這樣的對(duì)話框: 注意,,適合它的Content-Type頭信息同時(shí)也會(huì)被發(fā)送
Content-Length當(dāng)內(nèi)容將要被傳輸?shù)綖g覽器時(shí),服務(wù)器可以通過該頭部告知瀏覽器將要傳送文件的大?。╞ytes),。
對(duì)于文件下載來說這個(gè)信息相當(dāng)?shù)挠杏谩_@就是為什么瀏覽器知道下載進(jìn)度的原因,。 例如,,這里我寫了一段虛擬腳本,來模擬一個(gè)慢速下載,。
結(jié)果將會(huì)是這樣的: 現(xiàn)在,我將Content-Length頭部注釋掉:
結(jié)果就變成了這樣: 這個(gè)瀏覽器只會(huì)告訴你已下載了多少,,但不會(huì)告訴你總共需要下載多少,。而且進(jìn)度條也不會(huì)顯示進(jìn)度。 Etag這是另一個(gè)為緩存而產(chǎn)生的頭部信息,。它看起來會(huì)是這樣:
服務(wù)器可能會(huì)將該信息和每個(gè)被發(fā)送文件一起響應(yīng)給瀏覽器,。該值可以包含文檔的最后修改日期,,文件大小或者文件校驗(yàn)和。瀏覽會(huì)把它和所接收到的文檔一起緩存,。下一次當(dāng)瀏覽器再次請(qǐng)求同一文件時(shí)將會(huì)發(fā)送如下的HTTP請(qǐng)求:
如果所請(qǐng)求的文檔Etag值和它一致,,服務(wù)器將會(huì)發(fā)送304狀態(tài)碼,而不是2oo,。并且不返回內(nèi)容,。瀏覽器此時(shí)就會(huì)從緩存加載該文件。 Last-Modified顧名思義,,這個(gè)頭部信息用GMT格式表明了文檔的最后修改時(shí)間:
它提供了另一種緩存機(jī)制,。瀏覽器可能會(huì)發(fā)送這樣的請(qǐng)求:
在If-Modified-Since一節(jié)我們已經(jīng)討論過了。 Location這個(gè)頭部是用來重定向的,。如果響應(yīng)代碼為 301 或者 302 ,,服務(wù)器就必須發(fā)送該頭部。例如,,當(dāng)你訪問 http://www. 時(shí)瀏覽器就會(huì)收到如下的響應(yīng):
在PHP中你可以通過這種方式對(duì)訪客重定向: 默認(rèn)會(huì)發(fā)送302狀態(tài)碼,,如果你想發(fā)送301,就這樣寫:
Set-Cookie當(dāng)一個(gè)網(wǎng)站需要設(shè)置或者更新你瀏覽的cookie信息時(shí),,它就會(huì)使用這樣的頭部:
每個(gè)cookie會(huì)作為單獨(dú)的一條頭部信息,。注意,通過js設(shè)置cookie將不會(huì)體現(xiàn)在HTTP頭中,。 在PHP中,,你可以通過setcookie()函數(shù)來設(shè)置cookie,PHP會(huì)發(fā)送合適的HTTP 頭,。
它會(huì)發(fā)送這樣的頭信息:
如果未指定到期時(shí)間,,cookie就會(huì)在瀏覽器關(guān)閉后被刪除。 WWW-Authenticate一個(gè)網(wǎng)站可能會(huì)通過HTTP發(fā)送這個(gè)頭部信息來驗(yàn)證用戶,。當(dāng)瀏覽器看到頭部有這個(gè)響應(yīng)時(shí)就會(huì)打開一個(gè)彈出窗,。
它會(huì)看起來像這樣: 在PHP手冊(cè)的一章中就有一段簡(jiǎn)單的代碼演示了如果用PHP做這樣的事情:
Content-Encoding這個(gè)頭部通常會(huì)在返回內(nèi)容被壓縮時(shí)設(shè)置。
在PHP中,,如果你調(diào)用了ob_gzhandler()函數(shù),,這個(gè)頭部將會(huì)自動(dòng)被設(shè)置。 中文譯文:HTTP Headers 入門 | 感謝robin的辛勤勞動(dòng) PS: 這是本站第一篇轉(zhuǎn)載的文章,,以后如果遇到國內(nèi)的優(yōu)秀文章,、作品,也會(huì)通過轉(zhuǎn)載的方式呈現(xiàn)給大家,,不再拘泥于原創(chuàng)及翻譯,。如果大家有好的文章也可向我推薦。 |
|