目錄
- 報文是如何流動的
- 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>2status-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ù)器獲取文檔的首部 | 否 |
棄用 | - | |
棄用 | - | |
棄用 | - |
* 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ù)器(小明找老師請假,老師:出去,讓你爸打電話給我) |
棄用 | ||
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)容首部
- 實體緩存首部
參考
書中的內(nèi)容很多都老舊了,請參考 http://www.w3c.org/
https://developer.mozilla.org/zh-CN/docs/Web/HTTP