HTTP報文

如果HTTP是因特網(wǎng)的信使滞诺,那么HTTP報文就是它用來搬東西的包裹茵烈。
HTTP使用術(shù)語流入和流出來描述事務(wù)處理的方向百匆,報文流入源端服務(wù)器,工作完之后呜投,會流回客戶端。不管是請求報文還是響應(yīng)報文存璃,所有報文都會向下游流動仑荐,所有報文的發(fā)送者都在接收者的上游。

1報文的組成部分

所有的報文都可以被分成請求報文或者響應(yīng)報文纵东。報文由三個部分組成粘招,對報文進行描述的起始行,包含屬性的首部偎球,以及可選的包含數(shù)據(jù)的主題部分洒扎。
下面是HTTP請求報文的格式:
<method> <request-URL> <version>
<headers>
<entity-body>
HTTP響應(yīng)報文的格式:
<version> <status> <reason-phrase>
<headers>
<entity-body>
下面對每個部分分別進行說明。

  • 方法
    客戶端希望服務(wù)器對資源執(zhí)行的操作衰絮,是一個單獨的詞袍冷,比如說put,get,delete。
  • 請求URL
    命名了所請求資源或者URL路徑組件的完整URL猫牡。
  • 版本
    報文所使用的HTTP版本胡诗,其格式通常為:
    HTTP/<major>.<minor>
  • 狀態(tài)碼
    這個三位數(shù)字描述了請求過程中所發(fā)生的情況。每個狀態(tài)的第一個數(shù)字都描述了狀態(tài)的一般類型淌友。比如2開頭是請求完成煌恢,3開頭是重定向,4開頭是客戶端問題震庭,5開頭是服務(wù)器問題瑰抵。
  • 原因短語
    原因短語是配合狀態(tài)碼一起,更詳細的描述響應(yīng)的狀態(tài)器联。
  • 首部
    可以有零個首部或多個首部二汛,每個首部都包含一個名字,后面跟著一個":"主籍,然后是一個可選的空格习贫,接著是一個值,最后是一個CRLF千元。首部是由一個(CRLF)空行結(jié)束的苫昌,表示首部列表的結(jié)束和實體主體部分的開始。
  • 實體的主體部分
    實體的主體部分包含一個由任意數(shù)據(jù)組成的數(shù)據(jù)塊幸海,并不是所有的報文都包含實體的主體部分祟身。

2方法

1.GET

get是最常用的方法奥务,通常用于請求服務(wù)器發(fā)送某個資源。


GET.png

2.HEAD方法和GET方法相似袜硫,都是從服務(wù)器端拉數(shù)據(jù)氯葬,不同的是使用HEAD方法時響應(yīng)只返回首部而不返回實體的主題部分。這樣既有允許客戶端在未獲取實際資源的情況下對資源的首部進行檢查婉陷。使用HEAD可以:

1.在不火氣資源的情況下了解資源的情況(如資源類型)
2.通過查看首部測試資源是否被修改了帚称。


HEAD.png

3.PUT

與get從服務(wù)器中讀取文檔相反,put會向服務(wù)器中寫入文檔秽澳。


PUT.png

PUT方法的語義就是讓服務(wù)器用請求的主題部分來創(chuàng)建一個由所請求的URL命名的新文檔闯睹,或者如果那個URL已經(jīng)存在的話,就用這個主體來替代它担神。因為普通允許用戶進行修改楼吃,所以很多web服務(wù)器都要求在執(zhí)行put之前進行驗證。

4.POST

5.TRACE

客戶端發(fā)起一個請求的時候妄讯,這個請求可能會穿過防火墻孩锡,網(wǎng)關(guān),代理等亥贸,每一個中間節(jié)點都可能會修改原始的HTTP請求躬窜,TRACE允許客戶端在報文最終被發(fā)送給服務(wù)器時查看它最終的樣子。
發(fā)送TRACE請求時砌函,行程最后一站的服務(wù)器會彈回一條TRACE響應(yīng)斩披,并在響應(yīng)主體中攜帶它收到的請求報文,這樣發(fā)送端就可以檢查請求報文是否被修改或毀壞讹俊。

6.OPTIONS

OPTIONS方法請求web服務(wù)器告知其支持的各種方法垦沉。可以詢問服務(wù)器通常支持哪些方法仍劈,厕倍,或者對某些特殊資源支持哪些方法。這樣客戶端不用訪問那些資源就能知道訪問各種資源的最優(yōu)方式贩疙。

7.DELETE

DELETE方法所做的事情就是請求服務(wù)器刪除請求URL所指的資源讹弯。

3.狀態(tài)碼

HTTP狀態(tài)碼被分為5類,狀態(tài)碼是一個三位數(shù)字这溅,以1開頭的是信息性狀態(tài)碼组民,2開頭的是請求成功狀態(tài)碼,3開頭的是重定向狀態(tài)碼悲靴,4開頭的是客戶端錯誤狀態(tài)碼臭胜,5開頭的是服務(wù)器錯誤狀態(tài)碼。下面分別進行說明。

1. 100-199狀態(tài)碼

狀態(tài)碼 原因短語 含義
100 Continue 服務(wù)器已經(jīng)接受到請求頭并且客戶端應(yīng)該繼續(xù)發(fā)送請求主體
101 Switching Protocols 服務(wù)器已經(jīng)理解了客戶端的請求耸三,并將通過Upgrade消息頭通知客戶端采用不同的協(xié)議來完成這個請求

2. 200-299 ——成功狀態(tài)碼

這一類型的狀態(tài)碼乱陡,代表請求已經(jīng)被服務(wù)器成功接收,理解仪壮。

狀態(tài)碼 原因短語 含義
200 OK 請求沒問題憨颠,實體的主體部分包含了所請求的資源
201 Created 請求已經(jīng)被實現(xiàn),而且已經(jīng)有一個新的資源依請求需要而創(chuàng)建积锅,且其URL已經(jīng)隨響應(yīng)的location頭部信息返回爽彤,假如需要的資源沒法創(chuàng)建,則返回202
202 Accepted 請求已經(jīng)被接受乏沸,但是服務(wù)器還沒有執(zhí)行任何操作淫茵,不能保證服務(wù)器會完成這個請求
204 No Content 服務(wù)器成功處理了請求,但是沒有返回任何內(nèi)容
205 Reset Content 服務(wù)器成功處理了請求蹬跃,但是沒有返回任何內(nèi)容,和204不同铆铆,此響應(yīng)要求請求者重置響應(yīng)視圖
206 Partial Content 客戶端可以通過某些特殊的首部來獲取部分或某個范圍內(nèi)的文檔蝶缀,這個狀態(tài)碼就說明范圍請求成功了。

3. 300-399 ——重定向狀態(tài)碼

重定向狀態(tài)碼要么告訴客戶端使用替代位置來訪問他們所感興趣的資源薄货,要么就提供一個替代的響應(yīng)而不是資源的內(nèi)容翁都。如果資源已被移動,可發(fā)送一個重定向狀態(tài)碼和一個可選的location首部來告知客戶端資源已被移走谅猾,以及現(xiàn)在可以再哪里找到它柄慰。

狀態(tài)碼 原因短語 含義
300 Multiple Choices URL對應(yīng)的資源有多重選擇,比如HTML網(wǎng)頁有中文的和英文的
301 Moved Permanently 資源被永久移除了税娜,一般在響應(yīng)的location首部中給出重定向的URL
302 Found 資源只是臨時重定向坐搔,以后請求還是使用舊的URL,在響應(yīng)頭中應(yīng)該給出location首部來定位臨時資源
304 Not Modified 表示資源未被修改敬矩,因為請求頭指定了If-Modified-Since或If-None-Match概行,這樣客戶端仍然使用以前的副本

4. 400-400 ——客戶端錯誤狀態(tài)碼

有時候客戶端會發(fā)送一些服務(wù)器無法處理的東西,比如格式錯誤的請求報文弧岳,或者請求一個不存在的URL凳忙。很多客戶端錯誤都是由瀏覽器來處理的,并不會打擾到用戶禽炬,只有少數(shù)比如404會穿過瀏覽器來到用戶面前涧卵。

狀態(tài)碼 原因短語 含義
400 Bad Request 用于告知客戶端它發(fā)送了一個錯誤的請求
401 Unauthorized 比如有時候請求的會后需要加上token認證,這時候沒有加token就會出現(xiàn)401
403 Forbidden 被服務(wù)器拒絕腹尖,服務(wù)器可以在實體的主題部分對原因進行描述柳恐,但是這個狀態(tài)碼通常是在服務(wù)器不想告知拒絕理由的時候使用
404 Not Found 服務(wù)器無法找到所請求的URL
405 Method Not Allowed 發(fā)起的請求中帶有所請求的URL不支持的方法。應(yīng)該在響應(yīng)中包含allow首部,告知客戶端可以對所請求的URL使用的方法胎撤。
406 Not Acceptable 客戶端可以在請求頭中指定它們原意接受什么類型的實體晓殊,當服務(wù)器無法給出特定類型的資源時使用此狀態(tài)碼。
408 Request Timeout 客戶端沒有在服務(wù)器預(yù)備等待的時間內(nèi)完成請求
411 Length Required 服務(wù)器要求在請求報文中包含Content-length時使用

5. 500-599 ——服務(wù)器錯誤狀態(tài)碼

有時候客戶端發(fā)送了一條有效請求伤提,服務(wù)器自身卻出錯了巫俺。代理嘗試著代表客戶端與服務(wù)器進行交流時經(jīng)常會出現(xiàn)問題。

狀態(tài)碼 原因短語 含義
500 Internal Server Error 服務(wù)器遇到妨礙它為客戶端提供請求的錯誤時
501 Not Implemented 客戶端發(fā)出的請求超出了服務(wù)器的能力范圍時肿男,使用此狀態(tài)碼
502 Bad Gateway 作為代理或網(wǎng)關(guān)使用的服務(wù)器從上游服務(wù)器接收到無效的響應(yīng)
503 Service Unavailable 臨時的服務(wù)器維護或過載

4.首部

首部可以分為通用首部介汹,請求首部,響應(yīng)首部舶沛,實體首部嘹承。下面分別對這幾部分進行說明:

1.通用首部

這些是在客戶端和服務(wù)器都可以使用的首部,可以在客戶端如庭,服務(wù)器和其他應(yīng)用之間提供一些非常有用的通用功能叹卷。
下表是一些通用的信息性首部:

首部 描述
Date 提供日期和時間標志,說明報文是什么時候創(chuàng)建的
MIME-Version 給出了發(fā)送端使用MIME版本
Transfer-Encoding 告訴接收端為了保證報文的可靠傳輸坪它,對報文采用了什么編碼方式
Via 顯示了報恩經(jīng)過的中間節(jié)點

通用緩存首部:

首部 描述
Cache-Control 用于傳輸對象的緩存信息骤竹,它的值是一個緩存指令,給出了對某個對象可緩存性有關(guān)的特有指令
Pragma 另一種隨報文傳送指示的方式往毡,但并不專用于緩存

2.請求首部

請求首部是只在請求報文中有意義的首部蒙揣,用于說明是誰或什么在發(fā)送請求,請求源于何處开瞭,或者客戶端的喜好或能力懒震。

1.請求的信息性首部
首部 描述
Client-IP 運行客戶端的機器的IP地址
Host 接收請求的服務(wù)器的主機名和端口號
Referer 如果在主頁A上點擊一個鏈接,進入主頁嗤详,瀏覽器就會在請求頭中加入一個帶有值A(chǔ)deReferer首部个扰,只有在點擊鏈接的時候,瀏覽器才會加入這個首部断楷,自己輸入鏈接時不會插入這個首部
2.Accept首部
首部 描述
Accept 告訴服務(wù)器锨匆,客戶端能夠接受哪些媒體類型
Accept-Charset 告訴服務(wù)器能夠發(fā)送哪些字符集
Accept-Encoding 告訴服務(wù)器能夠發(fā)送哪些編碼方式
Accept-Language 告訴服務(wù)器能夠發(fā)送哪些語言
3.條件請求首部
首部 描述
If-Match 如果實體標記與文檔當前的實體標記相符,就獲取這份文檔
If-Modified-Since 如果文檔在這個指定的日期之后進行了修改冬筒,就獲取這份文檔
If-None-Match 如果實體標記與文檔當前的實體標記不符恐锣,就獲取文檔
If-Range 允許對文檔的某個范圍進行條件請求
If-Unmodified-Since 如果在這個指定的日期之后沒有被修改過,那么久獲取這個文檔
4.安全請求首部
首部 描述
Authorization 用來向服務(wù)器回應(yīng)自己的身份驗證信息
Cookie 客戶端識別和跟蹤的擴展首部

3.響應(yīng)首部

響應(yīng)報文都有自己的響應(yīng)首部集舞痰,響應(yīng)首部為客戶端提供了一些額外的信息土榴,比如誰在發(fā)送響應(yīng),響應(yīng)者的功能响牛,甚至和響應(yīng)相關(guān)的一些特殊指令玷禽。這些首部有助于客戶端處理響應(yīng)赫段,并在將來發(fā)起更好的請求。

1.響應(yīng)的信息性首部
首部 描述
Age 響應(yīng)持續(xù)時間
Server 服務(wù)器應(yīng)用程序軟件的名稱和版本
Title 對HTML文檔來說矢赁,就是HTML源端給出的標題
2.安全響應(yīng)首部

|首部|描述|
|Proxy-Authenticate|來自代理的隊客戶端的質(zhì)詢列表|
|Set-Cookie|不是真正的安全首部糯笙,但是隱含有安全功能,可以再客戶端設(shè)置一個令牌撩银,以便服務(wù)器對客戶端進行標識|

4.實體首部

有很多首部可以用來描述HTTP報文的負荷给涕,由于請求和響應(yīng)報文中都可能包含實體部分,所以在這兩種類型的報文中都可能出現(xiàn)這些首部额获。

首部 描述
Allow 可以對此實體執(zhí)行的請求方法
Location 告知客戶端實體實際上位于何處够庙,大部分時候用于重定向
Content-Type 主體的對象類型
Content-Length 主體的長度或尺寸
Content-Location 資源實際所處的位置
ETag 與此實體相關(guān)的實體標記
Expires 實體不再有效,要從原始的源端再次獲取此實體的日期和時間
Last-Modified 這個實體最后一次修改的日期和時間
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抄邀,一起剝皮案震驚了整個濱河市耘眨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌境肾,老刑警劉巖剔难,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奥喻,居然都是意外死亡钥飞,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門衫嵌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人彻秆,你說我怎么就攤上這事楔绞。” “怎么了唇兑?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵酒朵,是天一觀的道長。 經(jīng)常有香客問我扎附,道長蔫耽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任留夜,我火速辦了婚禮匙铡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碍粥。我一直安慰自己鳖眼,他們只是感情好,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布嚼摩。 她就那樣靜靜地躺著钦讳,像睡著了一般矿瘦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愿卒,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天缚去,我揣著相機與錄音,去河邊找鬼琼开。 笑死易结,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的稠通。 我是一名探鬼主播衬衬,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼改橘!你這毒婦竟也來了滋尉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤飞主,失蹤者是張志新(化名)和其女友劉穎狮惜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碌识,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡碾篡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了筏餐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片开泽。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖魁瞪,靈堂內(nèi)的尸體忽然破棺而出穆律,到底是詐尸還是另有隱情,我是刑警寧澤导俘,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布峦耘,位于F島的核電站,受9級特大地震影響旅薄,放射性物質(zhì)發(fā)生泄漏辅髓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一少梁、第九天 我趴在偏房一處隱蔽的房頂上張望洛口。 院中可真熱鬧,春花似錦猎莲、人聲如沸绍弟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽樟遣。三九已至而叼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間豹悬,已是汗流浹背葵陵。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瞻佛,地道東北人脱篙。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像伤柄,于是被迫代替她去往敵國和親绊困。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1. 網(wǎng)絡(luò)基礎(chǔ)TCP/IP HTTP基于TCP/IP協(xié)議族适刀,HTTP屬于它內(nèi)部的一個子集秤朗。 把互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集...
    yozosann閱讀 3,445評論 0 20
  • 本文是《圖解HTTP》讀書筆記的第二篇,主要包括此書的第六章內(nèi)容笔喉,因為第六章的內(nèi)容較多取视,而且比較重要,所以單獨寫為...
    lijiankun24閱讀 1,368評論 0 6
  • 版權(quán)歸作者所有常挚,任何形式轉(zhuǎn)載請聯(lián)系作者作谭。 作者:花哈哈hhh 可能小說里的瑪麗蘇劇情就是男主角苦苦哀求的說:“你聽...
    陳小花fa閱讀 586評論 4 16
  • 感恩正式進入職場的領(lǐng)路人王加博,在離開保安公司以后奄毡,進入了一家辦公設(shè)備公司做了一名推銷員折欠。這是我最初的定義,...
    蘇州浪花閱讀 544評論 0 49
  • 小時候吼过,能吃到零食怨酝,我認為是最幸福的事啦。 今天那先,去見朋友,朋友精心準備切好了的香瓜赡艰、西瓜和香蕉招待我...
    看風景的兔子閱讀 865評論 1 1