《http權(quán)威指南》閱讀筆記,第三章撩独,HTTP報文

目錄

  • 報文是如何流動的
  • HTTP報文的三個組成部分(起始行,首部,實體的主體)
  • 請求報文支持的各種方法
  • 和響應(yīng)報文一起返回的各種狀態(tài)碼
  • 各種各樣的首部是做什么的

報文是如何流動的

報文流(快遞)

就像是快遞包裹(http報文),有個發(fā)貨人(客戶端),有個收貨人(服務(wù)端),包裹上面貼了快遞面單(起始行與首部),包裹里面有內(nèi)容(報文主體),
包裹程在轉(zhuǎn)運中心(各種服務(wù)器代理)之間單向傳遞,送達(dá)收貨人(服務(wù)器)的過程就是快遞(報文流)
當(dāng)然這個過程是可以反向的,服務(wù)端想客戶端發(fā)送報文.

HTTP報文的三個組成部分(起始行,首部,實體的主體)

報文(快遞包裹)

  • 快遞面單(起始行) 填寫收貨人,收貨地址
  • 快遞面單(首部) 填寫是,是否到付,包裹里面的東西,是否保價......
  • 快遞面單(自定義首部) 在包裹上寫一個大大的電話號碼,方便查看
  • 快遞包裹(主體) 透明包裝(字符串),黑箱子(二進(jìn)制)

報文格式

請求報文

< method> < request- URL> < version>
< headers>

< entity- body>

響應(yīng)報文

< version> < status> < reason- phrase>
< headers>

< entity- body>

概述

  • method: 方法

  • request-URL: 請求地址

  • version: 版本號 HTTP/<major>.<minor>
    **版本號1.12>1.2 因為主版本相同,次要版本12>2

  • status-code: 狀態(tài)碼 100-599之間的數(shù)字,給代碼用的

  • reason-phrase: 原因短語,給人看的

  • headers:首部,0個或者多個

    常見的首部實例

    首部實例 描述
    Date:Tue, 3Oct 1997 02: 16: 03 GMT 服務(wù)器產(chǎn)生響應(yīng)的日期
    Content-length:12345 實體的主體部分有12345字節(jié)的數(shù)據(jù)
    Content-type:image/gif 實體的主體部分是一張gif圖片
    Accept: image/ gif, image/ jpeg, text/ html 客戶端可以接收gif圖片JPG圖片與HTML

    首部延續(xù)行
    分行提高可讀性,分行的前面需要加空格或者tab制表符

  • entity-body:主體,可有可無

請求報文支持的各種方法

方法 描述 是否包含主體
get 從服務(wù)器獲取一份文檔
post 向服務(wù)器發(fā)送需要處理的數(shù)據(jù)
put 向服務(wù)器提交一份文檔
delete 從服務(wù)器刪除一份文檔
options 決定服務(wù)器上可以執(zhí)行哪些方法
head 只從服務(wù)器獲取文檔的首部
trace 棄用 -
track 棄用 -
coonect 棄用 -

* delete不一定真的能刪除,服務(wù)器可以不響應(yīng)該請求

和響應(yīng)報文一起返回的各種狀態(tài)碼

狀態(tài)碼分類

整體范圍 已定義范圍 分類
100~199 100~101 信息提示
200~299 200~206 成功
300~399 300~305 重定向
400~499 400~415 客戶端錯誤
500~599 500~505 服務(wù)器錯誤

狀態(tài)碼明細(xì)

狀態(tài)碼 短語 解釋
100 Continue 收到了請求的初始部分,請客戶端繼續(xù).
101 Switching protocols 說明服務(wù)器正在根據(jù)客戶端的制定,,將協(xié)議切換成Update首部所列的協(xié)議

100

客戶端向服務(wù)器發(fā)很大文件,不確定服務(wù)器是否接受,可以先發(fā)一個帶Expect:100 Continue的頭,詢問服務(wù)器是否接受,服務(wù)器返回 100響應(yīng)后,發(fā)送實體結(jié)束.

  • 在實現(xiàn)的時候,有的服務(wù)器會亂發(fā)100, 客戶端 要甄別過濾掉
  • 響應(yīng)超時的話,客戶端 也要把實體發(fā)出去,不能傻等服務(wù)器響應(yīng)
  • 沒有收到帶Expect:100 Continue的請求, 服務(wù)器 絕對不應(yīng)該響應(yīng)100
  • 當(dāng) 服務(wù)器 已經(jīng)收到實體的情況下,就不用返回100,可以返回其他狀態(tài)碼跳過100
  • 代理服務(wù)器 收到100請求的時候,要進(jìn)行判斷
    • 下流服務(wù)器 支持不清楚 http/1.1的話,轉(zhuǎn)發(fā);
    • 下流服務(wù)器 不支持,返回100,再可以去掉這個頭,再轉(zhuǎn)發(fā);
    • 下流服務(wù)器 不支持,返回417錯誤;

101

當(dāng) 客戶端 使用 Upgrade 頭的時候,服務(wù)器認(rèn)可就返回101。Upgrade頭用于 升級協(xié)議 的,比如現(xiàn)在用的是http/1.1,我想用http/2.1或者我想用 websocket ,就可以在請求頭里面加上Upgrade:websocket 或者 Upgrade:http/2.0

狀態(tài)碼 短語 解釋
200 OK 如你所愿,已搞定
201 Created 創(chuàng)建成功,主要用于put請求的返回
202 Accepted 收到,加入待辦,可以返回完成時間估計,進(jìn)度
203 Non-Authoritative-Information 非權(quán)威消息,比如客戶端要個蘋果,代理服務(wù)器從服務(wù)器拿個蘋果(200),吃了一口再給你(203)
204 No-Content 木有內(nèi)容,form的action,a鏈接返回204,不會跳轉(zhuǎn),可以判斷訪問成功
205 Reset-Content 用于表單提交后,重置表單而不刷新頁面
206 Particle-Content 返回部分內(nèi)容,必須返回Content-Range账月、Date综膀、Etag或者Content-Location首部
狀態(tài)碼 短語 解釋
300 Multiple Choices 找到好多,選一個唄
301 Moved Permanetly 沒找到,看看別的唄
302 Found 找到了,不過先看看別的
303 See Other 看看別的,響應(yīng)post請求
304 No Modified 未修改,看你的緩存去
305 Use Proxy 使用代理服務(wù)器(小明找老師請假,老師:出去,讓你爸打電話給我)
306 棄用
307 Temporary Redirect 重定向的地址必須是get或者h(yuǎn)ead請求,否則瀏覽器不自動跳轉(zhuǎn),需要用戶確定
狀態(tài)碼 短語 解釋
400 Bad Request 客戶端請求的語法錯誤,服務(wù)器無法理解
401 Unauthorized 請求要求用戶的身份認(rèn)證
402 Payment Required 保留局齿,將來使用
403 Forbidden 服務(wù)器理解請求客戶端的請求剧劝,但是拒絕執(zhí)行此請求
404 Not Found 服務(wù)器無法根據(jù)客戶端的請求找到資源(網(wǎng)頁)。通過此代碼抓歼,網(wǎng)站設(shè)計人員可設(shè)置“您所請求的資源無法找到”的個性頁面
405 Method Not Allowed 客戶端請求中的方法被禁止
406 Not Acceptable 服務(wù)器無法根據(jù)客戶端請求的內(nèi)容特性完成請求
407 Proxy Authentication Required 請求要求代理的身份認(rèn)證讥此,與401類似拢锹,但請求者應(yīng)當(dāng)使用代理進(jìn)行授權(quán)
408 Request Time-out 服務(wù)器等待客戶端發(fā)送的請求時間過長,超時
409 Conflict 服務(wù)器完成客戶端的PUT請求是可能返回此代碼萄喳,服務(wù)器處理請求時發(fā)生了沖突
410 Gone 客戶端請求的資源已經(jīng)不存在卒稳。410不同于404,如果資源以前有現(xiàn)在被永久刪除了可使用410代碼他巨,網(wǎng)站設(shè)計人員可通過301代碼指定資源的新位置
411 Length Required 服務(wù)器無法處理客戶端發(fā)送的不帶Content-Length的請求信息
412 Precondition Failed 客戶端請求信息的先決條件錯誤
413 Request Entity Too Large 由于請求的實體過大充坑,服務(wù)器無法處理,因此拒絕請求染突。為防止客戶端的連續(xù)請求捻爷,服務(wù)器可能會關(guān)閉連接。如果只是服務(wù)器暫時無法處理份企,則會包含一個Retry-After的響應(yīng)信息
414 Request-URI Too Large 請求的URI過長(URI通常為網(wǎng)址)也榄,服務(wù)器無法處理
415 Unsupported Media Type 服務(wù)器無法處理請求附帶的媒體格式
416 Requested range not satisfiable 客戶端請求的范圍無效
417 Expectation Failed 服務(wù)器無法滿足Expect的請求頭信息
狀態(tài)碼 短語 解釋
500 Internal Server Error 服務(wù)器內(nèi)部錯誤,無法完成請求
501 Not Implemented 服務(wù)器不支持請求的功能司志,無法完成請求
502 Bad Gateway 充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器手蝎,從遠(yuǎn)端服務(wù)器接收到了一個無效的請求
503 Service Unavailable 由于超載或系統(tǒng)維護(hù),服務(wù)器暫時的無法處理客戶端的請求俐芯。延時的長度可包含在服務(wù)器的Retry-After頭信息中
504 Gateway Time-out 類似于408,充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器棵介,未及時從遠(yuǎn)端服務(wù)器獲取請求
505 HTTP Version not supported 服務(wù)器不支持請求的HTTP協(xié)議的版本,無法完成處理

各種各樣的首部是做什么的

通用首部

通用的信息性首部

首部 描述
Coonection 允許客戶端服務(wù)器指定與請求/響應(yīng)連接有關(guān)的選項
Date 報文創(chuàng)建時間
MIME-Version 給出發(fā)送端的MIME版本
Trailer 如果報文采用分塊傳輸編碼就可以用這個首部列出位于報文拖掛( trailer) 部分的首部集合
Transfer-Encoding 告知接收端,對報文采用了怎樣的接收方式
Update 給出發(fā)送端想要升級使用的新版本或協(xié)議
Via 顯示報文經(jīng)過的中間節(jié)點(代理,網(wǎng)關(guān))

通用的緩存首部

首部 描述
Cache-Control 用于隨報文傳送緩存指示
Pragma 另一種隨報文傳送指示的方式,但并不專用于緩存

請求首部

請求的信息性首部

首部 描述
Client_IP 客戶端IP
From 提供客戶端用戶的Email地址
Host 給出接收請求的服務(wù)器地址和端口
Referer 提供了當(dāng)前請求URI的文檔的URL
UA-Color 客戶端顯示器顏色相關(guān)
UA-CPU 客戶端CPU的類型或制造商
UA-Disp 客戶端顯示屏幕
UA-OS 客戶端系統(tǒng)
UA-Pixels 客戶端像素
User_Agent 發(fā)起請求的客戶端名

Accept首部

首部 描述
Accept 媒體類型
Accept-Charset 字符集
Accept-Encoding 編碼方式
Accept-Language 語言
TE 拓展傳輸編碼

條件請求首部

首部 描述
Expect 允許客戶端列出某請求所要求的服務(wù)器行為
If-Match 如果實體標(biāo)記與文檔當(dāng)前的實體標(biāo)記相匹配,就獲取這份文檔
If-Modified-Since 某時間點后,資源被修改才返回
If-None-Match 返回標(biāo)記不匹配的
If-Range 對文檔的某個范圍進(jìn)行請求
If-Unmodefied-Since 某時間點后,資源沒有被改動,才返回
Range 請求范圍

安全請求首部

首部 描述
Authorization 身份認(rèn)證
Cookie 向服務(wù)器傳送一個令牌
Cookie2 用來說明請求端支持的cookie版本

代理請求首部

  • Max-Forward
  • Proxy-Authorization
  • Proxy-Coonection

響應(yīng)首部

首部 描述
Age 響應(yīng)持續(xù)時間
Public 服務(wù)器為其資源支持的請求方法列表
Retry-After 如果資源不可用,在此日期重試
Title 對HTML文檔來說,就是源端給出的標(biāo)題
Warning 比原因短語中更詳細(xì)的一些警告報文
  • 協(xié)商首部
  • 安全響應(yīng)首部
  • 實體首部
  • 內(nèi)容首部
  • 實體緩存首部

參考

http狀態(tài)碼詳解
http中的204和205

書中的內(nèi)容很多都老舊了,請參考 http://www.w3c.org/
https://developer.mozilla.org/zh-CN/docs/Web/HTTP

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吧史,一起剝皮案震驚了整個濱河市邮辽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贸营,老刑警劉巖吨述,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钞脂,居然都是意外死亡揣云,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門冰啃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邓夕,“玉大人,你說我怎么就攤上這事阎毅》俑眨” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵扇调,是天一觀的道長矿咕。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么碳柱? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任捡絮,我火速辦了婚禮,結(jié)果婚禮上莲镣,老公的妹妹穿的比我還像新娘福稳。我一直安慰自己,他們只是感情好剥悟,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布灵寺。 她就那樣靜靜地躺著曼库,像睡著了一般区岗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上毁枯,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天慈缔,我揣著相機(jī)與錄音,去河邊找鬼种玛。 笑死藐鹤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赂韵。 我是一名探鬼主播娱节,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼祭示!你這毒婦竟也來了肄满?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤质涛,失蹤者是張志新(化名)和其女友劉穎稠歉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汇陆,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡怒炸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了毡代。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阅羹。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖教寂,靈堂內(nèi)的尸體忽然破棺而出灯蝴,到底是詐尸還是另有隱情,我是刑警寧澤孝宗,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布穷躁,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏问潭。R本人自食惡果不足惜猿诸,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狡忙。 院中可真熱鬧梳虽,春花似錦、人聲如沸灾茁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽北专。三九已至禀挫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拓颓,已是汗流浹背语婴。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留驶睦,地道東北人砰左。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像场航,于是被迫代替她去往敵國和親缠导。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

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