從今天開(kāi)始閱讀圖解http這本書(shū)肥隆,下載地址:我的百度云
http的發(fā)展史
這個(gè)我就不說(shuō)了,總之起因就是因?yàn)橐粋€(gè)家伙想知識(shí)共享就搞出來(lái)這個(gè)東西。http協(xié)議的更新還是很慢的慷蠕,不像IE都到多少了掸冤。目前http協(xié)議正在準(zhǔn)備出2.0厘托,聽(tīng)說(shuō)老快了,市面上主流的還是1.1稿湿。
相關(guān)協(xié)議
與http關(guān)系比較大的幾個(gè)協(xié)議就是:tcp铅匹、ip、dns
下面一張圖形象說(shuō)明了http與這幾個(gè)協(xié)議的關(guān)系饺藤。
URI和URL
URI包含著URL
Uniform | Resource | Identifier |
---|---|---|
統(tǒng)一格式 | 資源 | 標(biāo)識(shí) |
http/ftp | ---- | ---- |
標(biāo)準(zhǔn)格式
http://[user:pass@]www.example.jp:80/dir/index.html?uid=1#ch1
協(xié)議 登陸信息 服務(wù)器地址 端口 文件路徑 查詢字符串 片段標(biāo)識(shí)符
第二章
請(qǐng)求和響應(yīng)報(bào)文的組成
服務(wù)器請(qǐng)求
除了對(duì)服務(wù)器資源的請(qǐng)求包斑,還可以對(duì)服務(wù)器本身進(jìn)行請(qǐng)求。比如:
OPTIONS * HTTP/1.1
這是對(duì)服務(wù)器支持http方法種類的查詢策精。
請(qǐng)求方法
- GET(SELECT)
用于請(qǐng)求資源舰始,一般用于頁(yè)面請(qǐng)求,數(shù)據(jù)請(qǐng)求等咽袜。根據(jù)RESTful架構(gòu)理解來(lái)看丸卷,這些都屬于服務(wù)器的資源。參照理解RESTful架構(gòu) - POST(CREATE)
在服務(wù)器新建一個(gè)資源询刹。通過(guò)提交服務(wù)器一些數(shù)據(jù)谜嫉,服務(wù)器根據(jù)這些數(shù)據(jù)進(jìn)行處理和資源的創(chuàng)建。 - PUT(UPDATE)
在服務(wù)器更新資源(客戶端提供改變后的完整資源)凹联。 - PATCH(UPDATE)
在服務(wù)器更新資源(客戶端提供改變的屬性)沐兰。 - DELETE(DELETE)
從服務(wù)器刪除資源。 - HEAD
獲取資源的元數(shù)據(jù)蔽挠。和GET方法一樣住闯,不過(guò)不返回報(bào)文主體。用于確認(rèn)URI的有效性和資源更新的時(shí)間澳淑。 - OPTIONS
用來(lái)查詢針對(duì)請(qǐng)求URI資源的支持方法比原。 - TRACE
trace和網(wǎng)絡(luò)路徑查詢差不多,它是在Max-forwards首部字段中填入最大跳數(shù)杠巡,然后每一跳減一量窘,減為0停止,響應(yīng)體為每一跳的信息氢拥。這個(gè)不常用蚌铜,而且還容易引發(fā)XST(跨站追蹤)锨侯。 - CONNECT
要求用隧道協(xié)議連接代理
PUT、PATCH冬殃、DELETE在一般網(wǎng)站上都不會(huì)用到囚痴,RESTful架構(gòu)的網(wǎng)站可能會(huì)開(kāi)放。主要是因?yàn)镠TTP/1.1的這些方法都不帶驗(yàn)證機(jī)制审葬。
持久連接和管線化
最初的http是每次http請(qǐng)求響應(yīng)完成都會(huì)斷開(kāi)tcp連接渡讼,這樣如果一個(gè)頁(yè)面有很多圖片就會(huì)有很多次tcp三次握手四次揮手,很耗時(shí)間耳璧。
http1.1提出keep-alive,只要沒(méi)有一端提出明確的斷開(kāi)連接展箱,就一直保持tcp連接通道旨枯,節(jié)省了多次tcp連接的時(shí)間。
管線化則提出http請(qǐng)求的同時(shí)發(fā)送混驰,像是異步一樣攀隔,不等待前面http響應(yīng)的回饋,異步等待回饋栖榨。
Cookie
http是無(wú)狀態(tài)協(xié)議昆汹,它的狀態(tài)通過(guò)cookie來(lái)保持。
響應(yīng)在header中添加set-cookie告訴客戶端下次請(qǐng)求加上cookie
請(qǐng)求在header中添加客戶端所有的cookie
狀態(tài)碼
服務(wù)器向用戶返回的狀態(tài)碼和提示信息婴栽,常見(jiàn)的有以下一些(方括號(hào)中是該狀態(tài)碼對(duì)應(yīng)的HTTP動(dòng)詞)满粗。
200 OK - [GET]:服務(wù)器成功返回用戶請(qǐng)求的數(shù)據(jù),該操作是冪等的(Idempotent)愚争。
201 CREATED - [POST/PUT/PATCH]:用戶新建或修改數(shù)據(jù)成功映皆。
202 Accepted - [*]:表示一個(gè)請(qǐng)求已經(jīng)進(jìn)入后臺(tái)排隊(duì)(異步任務(wù))
204 NO CONTENT - [DELETE]:用戶刪除數(shù)據(jù)成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發(fā)出的請(qǐng)求有錯(cuò)誤轰枝,服務(wù)器沒(méi)有進(jìn)行新建或修改數(shù)據(jù)的操作捅彻,該操作是冪等的。
401 Unauthorized - [*]:表示用戶沒(méi)有權(quán)限(令牌鞍陨、用戶名步淹、密碼錯(cuò)誤)。
403 Forbidden - [*] 表示用戶得到授權(quán)(與401錯(cuò)誤相對(duì))诚撵,但是訪問(wèn)是被禁止 的缭裆。
404 NOT FOUND - [*]:用戶發(fā)出的請(qǐng)求針對(duì)的是不存在的記錄,服務(wù)器沒(méi)有進(jìn)行操作砾脑,該操作是冪等的幼驶。
406 Not Acceptable - [GET]:用戶請(qǐng)求的格式不可得(比如用戶請(qǐng)求JSON格式,但是只有XML格式)韧衣。
410 Gone -[GET]:用戶請(qǐng)求的資源被永久刪除盅藻,且不會(huì)再得到的购桑。
422 Unprocesable entity - [POST/PUT/PATCH] 當(dāng)創(chuàng)建一個(gè)對(duì)象時(shí),發(fā)生一個(gè)驗(yàn)證錯(cuò)誤氏淑。
500 INTERNAL SERVER ERROR - [*]:服務(wù)器發(fā)生錯(cuò)誤勃蜘,用戶將無(wú)法判斷發(fā)出的請(qǐng)求是否成功。
狀態(tài)碼的完全列表參見(jiàn)這里假残。