原文地址
HTTP 協(xié)議是互聯(lián)網(wǎng)的基礎(chǔ)協(xié)議,也是網(wǎng)頁開發(fā)的必備知識,最新版本 HTTP/2 更是讓它成為技術(shù)熱點(diǎn)。
本文介紹 HTTP 協(xié)議的歷史演變和設(shè)計思路。

一、HTTP/0.9
HTTP 是基于 TCP/IP 協(xié)議的應(yīng)用層協(xié)議。它不涉及數(shù)據(jù)包(packet)傳輸,主要規(guī)定了客戶端和服務(wù)器之間的通信格式,默認(rèn)使用80端口。
最早版本是1991年發(fā)布的0.9版。該版本極其簡單,只有一個命令GET。
GET /index.html
上面命令表示,TCP 連接(connection)建立后,客戶端向服務(wù)器請求(request)網(wǎng)頁index.html。
協(xié)議規(guī)定,服務(wù)器只能回應(yīng)HTML格式的字符串,不能回應(yīng)別的格式。
<html>
<body>Hello World</body>
</html>
服務(wù)器發(fā)送完畢,就關(guān)閉TCP連接。
二、HTTP/1.0
2.1 簡介
1996年5月,HTTP/1.0 版本發(fā)布,內(nèi)容大大增加。
首先,任何格式的內(nèi)容都可以發(fā)送。這使得互聯(lián)網(wǎng)不僅可以傳輸文字,還能傳輸圖像、視頻、二進(jìn)制文件。這為互聯(lián)網(wǎng)的大發(fā)展奠定了基礎(chǔ)。
其次,除了GET命令,還引入了POST命令和HEAD命令,豐富了瀏覽器與服務(wù)器的互動手段。
再次,HTTP請求和回應(yīng)的格式也變了。除了數(shù)據(jù)部分,每次通信都必須包括頭信息(HTTP header),用來描述一些元數(shù)據(jù)。
其他的新增功能還包括狀態(tài)碼(status code)、多字符集支持、多部分發(fā)送(multi-part type)、權(quán)限(authorization)、緩存(cache)、內(nèi)容編碼(content encoding)等。
2.2 請求格式
下面是一個1.0版的HTTP請求的例子。
GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*
可以看到,這個格式與0.9版有很大變化。
第一行是請求命令,必須在尾部添加協(xié)議版本(HTTP/1.0)。后面就是多行頭信息,描述客戶端的情況。
2.3回應(yīng)格式
服務(wù)器的回應(yīng)如下。
HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
<html>
<body>Hello World</body>
</html>
回應(yīng)的格式是"頭信息 + 一個空行(\r\n) + 數(shù)據(jù)"。其中,第一行是"協(xié)議版本 + 狀態(tài)碼(status code) + 狀態(tài)描述"。
2.4Content-Type 字段
關(guān)于字符的編碼,1.0版規(guī)定,頭信息必須是 ASCII 碼,后面的數(shù)據(jù)可以是任何格式。因此,服務(wù)器回應(yīng)的時候,必須告訴客戶端,數(shù)據(jù)是什么格式,這就是Content-Type字段的作用。
下面是一些常見的Content-Type字段的值。
- text/plain
- text/html
- text/css
- image/jpeg
- image/png
- image/svg+xml
- audio/mp4
- video/mp4
- application/javascript
- application/pdf
- application/zip
- application/atom+xml
這些數(shù)據(jù)類型總稱為MIME type,每個值包括一級類型和二級類型,之間用斜杠分隔。
除了預(yù)定義的類型,廠商也可以自定義類型。
application/vnd.debian.binary-package
上面的類型表明,發(fā)送的是Debian系統(tǒng)的二進(jìn)制數(shù)據(jù)包。
MIME type還可以在尾部使用分號,添加參數(shù)。
Content-Type: text/html; charset=utf-8
上面的類型表明,發(fā)送的是網(wǎng)頁,而且編碼是UTF-8。
客戶端請求的時候,可以使用Accept字段聲明自己可以接受哪些數(shù)據(jù)格式。
Accept: */*
上面代碼中,客戶端聲明自己可以接受任何格式的數(shù)據(jù)。
MIME type不僅用在HTTP協(xié)議,還可以用在其他地方,比如HTML網(wǎng)頁。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- 等同于 -->
<meta charset="utf-8" />
2.5 Content-Encoding 字段
由于發(fā)送的數(shù)據(jù)可以是任何格式,因此可以把數(shù)據(jù)壓縮后再發(fā)送。Content-Encoding字段說明數(shù)據(jù)的壓縮方法。
Content-Encoding: gzip
Content-Encoding: compress
Content-Encoding: deflate
客戶端在請求時,用Accept-Encoding字段說明自己可以接受哪些壓縮方法。
Accept-Encoding: gzip, deflate
2.6缺點(diǎn)
HTTP/1.0 版的主要缺點(diǎn)是,每個TCP連接只能發(fā)送一個請求。發(fā)送數(shù)據(jù)完畢,連接就關(guān)閉,如果還要請求其他資源,就必須再新建一個連接。
TCP連接的新建成本很高,因?yàn)樾枰蛻舳撕头?wù)器三次握手,并且開始時發(fā)送速率較慢(slow start)。所以,HTTP 1.0版本的性能比較差。隨著網(wǎng)頁加載的外部資源越來越多,這個問題就愈發(fā)突出了。
為了解決這個問題,有些瀏覽器在請求時,用了一個非標(biāo)準(zhǔn)的Connection字段。
Connection: keep-alive
這個字段要求服務(wù)器不要關(guān)閉TCP連接,以便其他請求復(fù)用。服務(wù)器同樣回應(yīng)這個字段。
Connection: keep-alive
一個可以復(fù)用的TCP連接就建立了,直到客戶端或服務(wù)器主動關(guān)閉連接。但是,這不是標(biāo)準(zhǔn)字段,不同實(shí)現(xiàn)的行為可能不一致,因此不是根本的解決辦法。
三、HTTP/1.1
1997年1月,HTTP/1.1 版本發(fā)布,只比 1.0 版本晚了半年。它進(jìn)一步完善了 HTTP 協(xié)議,一直用到了20年后的今天,直到現(xiàn)在還是最流行的版本。
3.1 持久連接
1.1 版的最大變化,就是引入了持久連接(persistent connection),即TCP連接默認(rèn)不關(guān)閉,可以被多個請求復(fù)用,不用聲明Connection: keep-alive。
客戶端和服務(wù)器發(fā)現(xiàn)對方一段時間沒有活動,就可以主動關(guān)閉連接。不過,規(guī)范的做法是,客戶端在最后一個請求時,發(fā)送Connection: close,明確要求服務(wù)器關(guān)閉TCP連接。
Connection: close
目前,對于同一個域名,大多數(shù)瀏覽器允許同時建立6個持久連接。
3.2 管道機(jī)制
1.1 版還引入了管道機(jī)制(pipelining),即在同一個TCP連接里面,客戶端可以同時發(fā)送多個請求。這樣就進(jìn)一步改進(jìn)了HTTP協(xié)議的效率。
舉例來說,客戶端需要請求兩個資源。以前的做法是,在同一個TCP連接里面,先發(fā)送A請求,然后等待服務(wù)器做出回應(yīng),收到后再發(fā)出B請求。管道機(jī)制則是允許瀏覽器同時發(fā)出A請求和B請求,但是服務(wù)器還是按照順序,先回應(yīng)A請求,完成后再回應(yīng)B請求。
3.3 Content-Length 字段
一個TCP連接現(xiàn)在可以傳送多個回應(yīng),勢必就要有一種機(jī)制,區(qū)分?jǐn)?shù)據(jù)包是屬于哪一個回應(yīng)的。這就是Content-length字段的作用,聲明本次回應(yīng)的數(shù)據(jù)長度。
Content-Length: 3495
上面代碼告訴瀏覽器,本次回應(yīng)的長度是3495個字節(jié),后面的字節(jié)就屬于下一個回應(yīng)了。
在1.0版中,Content-Length字段不是必需的,因?yàn)闉g覽器發(fā)現(xiàn)服務(wù)器關(guān)閉了TCP連接,就表明收到的數(shù)據(jù)包已經(jīng)全了。
3.4分塊傳輸編碼
使用Content-Length字段的前提條件是,服務(wù)器發(fā)送回應(yīng)之前,必須知道回應(yīng)的數(shù)據(jù)長度。
對于一些很耗時的動態(tài)操作來說,這意味著,服務(wù)器要等到所有操作完成,才能發(fā)送數(shù)據(jù),顯然這樣的效率不高。更好的處理方法是,產(chǎn)生一塊數(shù)據(jù),就發(fā)送一塊,采用"流模式"(stream)取代"緩存模式"(buffer)。
因此,1.1版規(guī)定可以不使用Content-Length字段,而使用"分塊傳輸編碼"(chunked transfer encoding)。只要請求或回應(yīng)的頭信息有Transfer-Encoding字段,就表明回應(yīng)將由數(shù)量未定的數(shù)據(jù)塊組成。
Transfer-Encoding: chunked
每個非空的數(shù)據(jù)塊之前,會有一個16進(jìn)制的數(shù)值,表示這個塊的長度。最后是一個大小為0的塊,就表示本次回應(yīng)的數(shù)據(jù)發(fā)送完了。下面是一個例子。
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
25
This is the data in the first chunk
1C
and this is the second one
3
con
8
sequence
0
3.5 其他功能
1.1版還新增了許多動詞方法:PUT、PATCH、HEAD、 OPTIONS、DELETE。
另外,客戶端請求的頭信息新增了Host字段,用來指定服務(wù)器的域名。
Host: www.example.com
有了Host字段,就可以將請求發(fā)往同一臺服務(wù)器上的不同網(wǎng)站,為虛擬主機(jī)的興起打下了基礎(chǔ)。
3.6 缺點(diǎn)
雖然1.1版允許復(fù)用TCP連接,但是同一個TCP連接里面,所有的數(shù)據(jù)通信是按次序進(jìn)行的。服務(wù)器只有處理完一個回應(yīng),才會進(jìn)行下一個回應(yīng)。要是前面的回應(yīng)特別慢,后面就會有許多請求排隊(duì)等著。這稱為"隊(duì)頭堵塞"(Head-of-line blocking)。
為了避免這個問題,只有兩種方法:一是減少請求數(shù),二是同時多開持久連接。這導(dǎo)致了很多的網(wǎng)頁優(yōu)化技巧,比如合并腳本和樣式表、將圖片嵌入CSS代碼、域名分片(domain sharding)等等。如果HTTP協(xié)議設(shè)計得更好一些,這些額外的工作是可以避免的。
四、SPDY 協(xié)議
2009年,谷歌公開了自行研發(fā)的 SPDY 協(xié)議,主要解決 HTTP/1.1 效率不高的問題。
這個協(xié)議在Chrome瀏覽器上證明可行以后,就被當(dāng)作 HTTP/2 的基礎(chǔ),主要特性都在 HTTP/2 之中得到繼承。
五、HTTP/2
2015年,HTTP/2 發(fā)布。它不叫 HTTP/2.0,是因?yàn)闃?biāo)準(zhǔn)委員會不打算再發(fā)布子版本了,下一個新版本將是 HTTP/3。
5.1 二進(jìn)制協(xié)議
HTTP/1.1 版的頭信息肯定是文本(ASCII編碼),數(shù)據(jù)體可以是文本,也可以是二進(jìn)制。HTTP/2 則是一個徹底的二進(jìn)制協(xié)議,頭信息和數(shù)據(jù)體都是二進(jìn)制,并且統(tǒng)稱為"幀"(frame):頭信息幀和數(shù)據(jù)幀。
二進(jìn)制協(xié)議的一個好處是,可以定義額外的幀。HTTP/2 定義了近十種幀,為將來的高級應(yīng)用打好了基礎(chǔ)。如果使用文本實(shí)現(xiàn)這種功能,解析數(shù)據(jù)將會變得非常麻煩,二進(jìn)制解析則方便得多。
5.2 多工
HTTP/2 復(fù)用TCP連接,在一個連接里,客戶端和瀏覽器都可以同時發(fā)送多個請求或回應(yīng),而且不用按照順序一一對應(yīng),這樣就避免了"隊(duì)頭堵塞"。
舉例來說,在一個TCP連接里面,服務(wù)器同時收到了A請求和B請求,于是先回應(yīng)A請求,結(jié)果發(fā)現(xiàn)處理過程非常耗時,于是就發(fā)送A請求已經(jīng)處理好的部分, 接著回應(yīng)B請求,完成后,再發(fā)送A請求剩下的部分。
這樣雙向的、實(shí)時的通信,就叫做多工(Multiplexing)。
5.3數(shù)據(jù)流
因?yàn)?HTTP/2 的數(shù)據(jù)包是不按順序發(fā)送的,同一個連接里面連續(xù)的數(shù)據(jù)包,可能屬于不同的回應(yīng)。因此,必須要對數(shù)據(jù)包做標(biāo)記,指出它屬于哪個回應(yīng)。
HTTP/2 將每個請求或回應(yīng)的所有數(shù)據(jù)包,稱為一個數(shù)據(jù)流(stream)。每個數(shù)據(jù)流都有一個獨(dú)一無二的編號。數(shù)據(jù)包發(fā)送的時候,都必須標(biāo)記數(shù)據(jù)流ID,用來區(qū)分它屬于哪個數(shù)據(jù)流。另外還規(guī)定,客戶端發(fā)出的數(shù)據(jù)流,ID一律為奇數(shù),服務(wù)器發(fā)出的,ID為偶數(shù)。
數(shù)據(jù)流發(fā)送到一半的時候,客戶端和服務(wù)器都可以發(fā)送信號(RST_STREAM幀),取消這個數(shù)據(jù)流。1.1版取消數(shù)據(jù)流的唯一方法,就是關(guān)閉TCP連接。這就是說,HTTP/2 可以取消某一次請求,同時保證TCP連接還打開著,可以被其他請求使用
客戶端還可以指定數(shù)據(jù)流的優(yōu)先級。優(yōu)先級越高,服務(wù)器就會越早回應(yīng)。
5.4 頭信息壓縮
HTTP 協(xié)議不帶有狀態(tài),每次請求都必須附上所有信息。所以,請求的很多字段都是重復(fù)的,比如Cookie和User Agent,一模一樣的內(nèi)容,每次請求都必須附帶,這會浪費(fèi)很多帶寬,也影響速度。
HTTP/2 對這一點(diǎn)做了優(yōu)化,引入了頭信息壓縮機(jī)制(header compression)。一方面,頭信息使用gzip或compress壓縮后再發(fā)送;另一方面,客戶端和服務(wù)器同時維護(hù)一張頭信息表,所有字段都會存入這個表,生成一個索引號,以后就不發(fā)送同樣字段了,只發(fā)送索引號,這樣就提高速度了。
5.5 服務(wù)器推送
HTTP/2 允許服務(wù)器未經(jīng)請求,主動向客戶端發(fā)送資源,這叫做服務(wù)器推送(server push)。
常見場景是客戶端請求一個網(wǎng)頁,這個網(wǎng)頁里面包含很多靜態(tài)資源。正常情況下,客戶端必須收到網(wǎng)頁后,解析HTML源碼,發(fā)現(xiàn)有靜態(tài)資源,再發(fā)出靜態(tài)資源請求。其實(shí),服務(wù)器可以預(yù)期到客戶端請求網(wǎng)頁后,很可能會再請求靜態(tài)資源,所以就主動把這些靜態(tài)資源隨著網(wǎng)頁一起發(fā)給客戶端了。
HTTP1.0 HTTP 1.1主要區(qū)別
長連接
HTTP 1.0需要使用keep-alive參數(shù)來告知服務(wù)器端要建立一個長連接,而HTTP1.1默認(rèn)支持長連接。
HTTP是基于TCP/IP協(xié)議的,創(chuàng)建一個TCP連接是需要經(jīng)過三次握手的,有一定的開銷,如果每次通訊都要重新建立連接的話,對性能有影響。因此最好能維持一個長連接,可以用個長連接來發(fā)多個請求。
節(jié)約帶寬
HTTP 1.1支持只發(fā)送header信息(不帶任何body信息),如果服務(wù)器認(rèn)為客戶端有權(quán)限請求服務(wù)器,則返回100,否則返回401??蛻舳巳绻邮艿?00,才開始把請求body發(fā)送到服務(wù)器。
這樣當(dāng)服務(wù)器返回401的時候,客戶端就可以不用發(fā)送請求body了,節(jié)約了帶寬。
另外HTTP還支持傳送內(nèi)容的一部分。這樣當(dāng)客戶端已經(jīng)有一部分的資源后,只需要跟服務(wù)器請求另外的部分資源即可。這是支持文件斷點(diǎn)續(xù)傳的基礎(chǔ)。
HOST域
現(xiàn)在的web server例如tomat,設(shè)置虛擬站點(diǎn)是非常常見的,也即是說,web server上的多個虛擬站點(diǎn)可以共享同一個ip和端口。
HTTP1.0是沒有host域的,HTTP1.1才支持這個參數(shù)。
HTTP1.1 HTTP 2.0主要區(qū)別
多路復(fù)用
HTTP2.0使用了多路復(fù)用的技術(shù),做到同一個連接并發(fā)處理多個請求,而且并發(fā)請求的數(shù)量比HTTP1.1大了好幾個數(shù)量級。
當(dāng)然HTTP1.1也可以多建立幾個TCP連接,來支持處理更多并發(fā)的請求,但是創(chuàng)建TCP連接本身也是有開銷的。
TCP連接有一個預(yù)熱和保護(hù)的過程,先檢查數(shù)據(jù)是否傳送成功,一旦成功過,則慢慢加大傳輸速度。因此對應(yīng)瞬時并發(fā)的連接,服務(wù)器的響應(yīng)就會變慢。所以最好能使用一個建立好的連接,并且這個連接可以支持瞬時并發(fā)的請求。
數(shù)據(jù)壓縮
HTTP1.1不支持header數(shù)據(jù)的壓縮,HTTP2.0使用HPACK算法對header的數(shù)據(jù)進(jìn)行壓縮,這樣數(shù)據(jù)體積小了,在網(wǎng)絡(luò)上傳輸就會更快。
服務(wù)器推送
意思是說,當(dāng)我們對支持HTTP2.0的web server請求數(shù)據(jù)的時候,服務(wù)器會順便把一些客戶端需要的資源一起推送到客戶端,免得客戶端再次創(chuàng)建連接發(fā)送請求到服務(wù)器端獲取。這種方式非常合適加載靜態(tài)資源。
服務(wù)器端推送的這些資源其實(shí)存在客戶端的某處地方,客戶端直接從本地加載這些資源就可以了,不用走網(wǎng)絡(luò),速度自然是快很多的。
HTTP請求分析
HTTP請求報文

HTTP請求由狀態(tài)行(請求行)、請求頭(首部行)、請求正文三部分組成:
- 狀態(tài)行:包括請求方式Method、資源路徑URL、http協(xié)議版本Version;
- 請求頭:包括一些訪問的域名、用戶代理、Cookie等信息;
- 請求正文:就是HTTP請求的數(shù)據(jù)。
HTTP中的請求方法:
OPTIONS:返回服務(wù)器針對特定資源所支持的HTTP請求方法,也可以利用向web服務(wù)器發(fā)送‘*’的請求來測試服務(wù)器的功能性
HEAD:類似于get請求,只不過返回的響應(yīng)中沒有具體的內(nèi)容,用于獲取報頭;
GET:向特定的資源發(fā)出請求。它本質(zhì)就是發(fā)送一個請求來取得服務(wù)器上的某一資源。資源通過一組HTTP頭和呈現(xiàn)數(shù)據(jù)(如HTML文本,或者圖片或者視頻等)返回給客戶端。GET請求中,永遠(yuǎn)不會包含呈現(xiàn)數(shù)據(jù)。
POST:向指定資源提交數(shù)據(jù)進(jìn)行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求體中。POST請求可能會導(dǎo)致新的資源的建立和/或已有資源的修改。
PUT:向指定資源位置上傳其最新內(nèi)容
DELETE:請求服務(wù)器刪除Request-URL所標(biāo)識的資源
TRACE:回顯服務(wù)器收到的請求,主要用于測試或診斷
CONNECT:HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。
現(xiàn)在大多數(shù)協(xié)議版本為http/1.1,下圖所示就是GET的請求,沒有請求正文。GET方式僅僅為獲取服務(wù)器資源,方式較為簡單,因此在請求方式為GET的HTTP請求數(shù)據(jù)中,請求正文部分可以省略,直接將想要獲取的資源添加到URL中。

下圖所示為POST請求的格式,有狀態(tài)行、請求頭、請求正文三部分。

補(bǔ)充:常見請求頭字段
| Header | 解釋 | 示例 |
|---|---|---|
| Accept | 指定客戶端能夠接收的內(nèi)容類型 | Accept: text/plain, text/html |
| Accept-Charset | 瀏覽器可以接受的字符編碼集。 | Accept-Charset: iso-8859-5 |
| Accept-Encoding | 指定瀏覽器可以支持的web服務(wù)器返回內(nèi)容壓縮編碼類型。 | Accept-Encoding: compress, gzip |
| Accept-Language | 瀏覽器可接受的語言 | Accept-Language: en,zh |
| Cache-Control | 指定請求和響應(yīng)遵循的緩存機(jī)制 | Cache-Control: no-cache |
| Connection | 表示是否需要持久連接。(HTTP 1.1默認(rèn)進(jìn)行持久連接) | Connection: close |
| Cookie | HTTP請求發(fā)送時,會把保存在該請求域名下的所有cookie值一起發(fā)送給web服務(wù)器。 | Cookie: $Version=1; Skin=new; |
| Content-Length | 請求的內(nèi)容長度 | Content-Length: 348 |
| Content-Type | 請求的與實(shí)體對應(yīng)的MIME信息 | Content-Type: application/x-www-form-urlencoded |
| Host | 指定請求的服務(wù)器的域名和端口號 | Host: www.zcmhi.com |
| User-Agent | User-Agent的內(nèi)容包含發(fā)出請求的用戶信息 | User-Agent: Mozilla/5.0 (Linux; X11) |
二、HTTP響應(yīng)
2.1HTTP響應(yīng)報文

2.2響應(yīng)數(shù)據(jù)格式
服務(wù)器收到了客戶端發(fā)來的HTTP請求后,根據(jù)HTTP請求中的動作要求,服務(wù)端做出具體的動作,將結(jié)果回應(yīng)給客戶端,稱為HTTP響應(yīng)。
HTTP響應(yīng)由三部分組成:狀態(tài)行、響應(yīng)頭、響應(yīng)正文;
- 狀態(tài)行:包括協(xié)議版本Version、狀態(tài)碼Status Code、回應(yīng)短語;
- 響應(yīng)頭:包括搭建服務(wù)器的軟件,發(fā)送響應(yīng)的時間,回應(yīng)數(shù)據(jù)的格式等信息;
- 響應(yīng)正文:就是響應(yīng)的具體數(shù)據(jù)。
備注:我們主要關(guān)心并且能夠在客戶端瀏覽器看得到的是三位數(shù)的狀態(tài)碼,不同的狀態(tài)碼代表不同的含義,其中
具體HTTP響應(yīng)實(shí)例如下圖:
2.2 常見狀態(tài)碼的含義 - 200---OK/請求已經(jīng)正常處理完畢
- 204 No Content 該狀態(tài)碼表示服務(wù)器接收的請求已成功處理,但在返回的響應(yīng)報文中不含實(shí)體的主體部分。比如,當(dāng)從瀏覽器發(fā)出請求處理后,返回204響應(yīng),那么瀏覽器顯示的頁面不發(fā)生更新。
- 301---Moved Permanently/請求永久重定向
- 302---Found/請求臨時重定向
- 304---Not Modified/請求被重定向到客戶端本地緩存
- 400---Bad Request/客戶端請求存在語法錯誤
- 401---Unauthorized/客戶端請求沒有經(jīng)過授權(quán)
- 403---Forbidden/客戶端的請求被服務(wù)器拒絕,一般為客戶端沒有訪問權(quán)限
- 404---Not Found/客戶端請求的URL在服務(wù)端不存在
- 500---Internal Server Error/服務(wù)端永久錯誤
- 503---Service Unavailable/服務(wù)端發(fā)生臨時錯誤
補(bǔ)充:常見響應(yīng)頭字段
| Header | 解釋 | 示例 |
|---|---|---|
| Cache-Control | 告訴所有的緩存機(jī)制是否可以緩存及哪種類型 | Cache-Control: no-cache |
| Content-Encoding | web服務(wù)器支持的返回內(nèi)容壓縮編碼類型。 | Content-Encoding: gzip |
| Content-Language | 響應(yīng)體的語言 | Content-Language: en,zh |
| Content-Length | 響應(yīng)體的長度 | Content-Length: 348 |
| Content-Location | 請求資源可替代的備用的另一地址 | Content-Location: /index.htm |
| Content-MD5 | 返回資源的MD5校驗(yàn)值 | Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ== |
| Content-Range | 在整個返回體中本部分的字節(jié)位置 | Content-Range: bytes 21010-47021/47022 |
| Date | 原始服務(wù)器消息發(fā)出的時間 | Date: Tue, 15 Nov 2010 08:12:31 GMT |
| Expires | 響應(yīng)過期的日期和時間 | Expires: Thu, 01 Dec 2010 16:00:00 GMT |
| Last-Modified | 請求資源的最后修改時間 | Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT |
| Location | 用來重定向接收方到非請求URL的位置來完成請求或標(biāo)識新的資源 | Location: http://www.zcmhi.com/archives/94.html |
| refresh | 應(yīng)用于重定向或一個新的資源被創(chuàng)造,在5秒之后重定向(由網(wǎng)景提出,被大部分瀏覽器支持) | Refresh: 5; url=http://www.zcmhi.com/archives/94.html |
| Server | web服務(wù)器軟件名稱 | Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) |
| Set-Cookie | 設(shè)置Http Cookie | Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 |
| Transfer-Encoding | 文件傳輸編碼 | Transfer-Encoding:chunked |

