了解HTTP Headers的方方面面
[2] HTTP Request 的結構
[3] http響應結構
[4] HTTP Headers 中的 HTTP請求
[5] HTTP Headers 中的 HTTP響應
無論是做前端還是做后端,都會不時與HTTP Headers打交道,了解它無疑對Web開發有莫大幫助。這篇文章就讓我一起來學習下http headers的方方面。
什么是HTTP Headers
HTTP是“Hypertext Transfer Protocol”的所寫,整個萬維網都在使用這種協議,幾乎你在瀏覽器里看到的大部分內容都是通過http協議來傳輸的,比如這篇文章。
HTTP Headers是HTTP請求和相應的核心,它承載了關于客戶端瀏覽器,請求頁面,服務器等相關的信息。
示例
當你在瀏覽器地址欄里鍵入一個url,你的瀏覽器將會類似如下的http請求:
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: net.tutsplus.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
Pragma: no-cache
Cache-Control: no-cache
第一行被稱為“Request Line” 它描述的是這個請求的基本信息,剩下的就是HTTP headers了。
請求完成之后,你的瀏覽器可能會收到如下的HTTP響應:
HTTP/1.x 200 OK
Transfer-Encoding: chunked
Date: Sat, 28 Nov 2009 04:36:25 GMT
Server: LiteSpeed
Connection: close
X-Powered-By: W3 Total Cache/0.8
Pragma: public
Expires: Sat, 28 Nov 2009 05:36:25 GMT
Etag: "pub1259380237;gz"
Cache-Control: max-age=3600, public
Content-Type: text/html; charset=UTF-8
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
X-Pingback: http://net.tutsplus.com/xmlrpc.php
Content-Encoding: gzip
Vary: Accept-Encoding, Cookie, User-Agent
<!-- ... rest of the html ... -->
第一行呢被稱為“Status Line”,它之后就是http headers,空行完了就開始輸出內容了(在這個案例中是一些html輸出)。
但你查看頁面源代碼卻不能看到HTTP headers,雖然它們同你能看到的東西一起被傳送至瀏覽器了。
這個HTTP請求也發出了一些其它資源的接收請求,例如圖片,css文件,js文件等等。
下面我們來看看細節。
怎樣才能看到HTTP Headers
下面這些FireFox擴展能夠幫助你分析HTTP headers:
1. firebug
3. 在PHP中:
- getallheaders() 用來獲取請求頭部. 你也可以使用 $_SERVER 數組.
- headers_list() 用來獲取響應頭部.
文章下面將會看到一些使用php示范的例子。