http協(xié)議及歷史
http屬于與:應(yīng)用層 端口:80 https :443
| 七層:1物理》2數(shù)據(jù)鏈路 | 3網(wǎng)絡(luò) | 4傳輸 | 5會(huì)話》6表示》7應(yīng)用 |
|---|---|---|---|
| 四層:1物理 | 2網(wǎng)絡(luò) | 3傳輸 | 4應(yīng)用 |
91年http0.9版本 | 只有一個(gè)命令GET
96年http1.0版本|GET HEAD POST
97年http1.1版本 | GET HEAD POST OPTIONS PUT DELETE TRACE CONNECT增加http默認(rèn)持久連接
15年http/2 版本 增加多工 數(shù)據(jù)流 頭部壓縮 服務(wù)器推送
http請(qǐng)求
一個(gè)http請(qǐng)求包含四部分:
1請(qǐng)求方式 /協(xié)議/版本
eg: GET /HTTP/1.1
動(dòng)詞包括:GET、POST、HEAD、PUT、DELETE、TRACE OPTIONS。
2 請(qǐng)求頭
Key: value
Key: value
Key: value
請(qǐng)求頭包含有關(guān)的客戶端環(huán)境和請(qǐng)求正文的信息。其中Content-Type標(biāo)注了第4部分的格式。
3一個(gè)回車(chē)
請(qǐng)求頭和請(qǐng)求正文之間是一個(gè)空行,表示請(qǐng)求頭已經(jīng)結(jié)束,接下來(lái)的部分是請(qǐng)求正文。
4請(qǐng)求正文(可以為空)
標(biāo)準(zhǔn)格式:
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 請(qǐng)求頭
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: [http://localhost/](https://link.jianshu.com?t=http://localhost/)
Content-Length:25
Content-Type:application/x-www-form-urlencoded
空行
username=aa&password=1234 請(qǐng)求數(shù)據(jù)
http響應(yīng)
1 協(xié)議/版本號(hào) 狀態(tài)碼 狀態(tài)碼描述
如:HTTP/1.1 200 OK
1xx: 信息—表示請(qǐng)求已接收,繼續(xù)處理。
2xx: 成功—表示請(qǐng)求已經(jīng)被成功接收、理解、接受。
3xx: 重定向—要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的操作。
4xx: 客戶端錯(cuò)誤—請(qǐng)求有語(yǔ)法錯(cuò)誤或請(qǐng)求無(wú)法實(shí)現(xiàn)。
5xx: 服務(wù)器端錯(cuò)誤—服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求。
常見(jiàn)狀態(tài)碼說(shuō)明
200 OK //客戶端請(qǐng)求成功
301:永久重定向
302:臨時(shí)重定向
303:重定向,即從原url重定向到新的url。 例如php 的hear函數(shù)header("localtion:/index.php")
400 Bad Request //客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤,不能被服務(wù)器所理解
401 Unauthorized //請(qǐng)求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用
403 Forbidden //服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù),一般是服務(wù)器路徑?jīng)]有權(quán)限或者是其他權(quán)限相關(guān)問(wèn)題
404 Not Found //請(qǐng)求資源不存在,eg:輸入了錯(cuò)誤的URL
500 Internal Server Error //服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤:一般來(lái)說(shuō),這個(gè)問(wèn)題都會(huì)在服務(wù)器端的源代碼出現(xiàn)錯(cuò)誤時(shí)出現(xiàn),比如出現(xiàn)死循環(huán)。
502 Bad Gateway//作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請(qǐng)求時(shí),從上游服務(wù)器接收到無(wú)效的響應(yīng)。比如LNMP ,php-fpm沒(méi)有啟動(dòng)就會(huì)報(bào)502錯(cuò)誤。
503 Server Unavailable //服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常,比如java 容器部署war的時(shí)候,就出現(xiàn)503,或者是nginx處理的文件沒(méi)有權(quán)限。
504 Gateway Time-out:作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請(qǐng)求時(shí),未能及時(shí)從上游服務(wù)器(URI標(biāo)識(shí)出的服務(wù)器,例如HTTP、FTP、LDAP)或者輔助服務(wù)器(例如DNS)收到響應(yīng),比如nginx和php-fpm, php設(shè)置sleep(200),就會(huì)收到504 Gateway Time-out。注意:某些代理服務(wù)器在DNS查詢超時(shí)時(shí)會(huì)返回400或者500錯(cuò)誤
2響應(yīng)頭
Key1: value1
Key2: value2
Content-Type: text/html;charset=utf-8
其中Content-Type標(biāo)注了第4部分的格式。
3一個(gè)回車(chē)(\n)
和請(qǐng)求類(lèi)似,響應(yīng)頭和響應(yīng)正文之間是一個(gè)空行。
4響應(yīng)正文(可以很長(zhǎng)很長(zhǎng)很長(zhǎng))
響應(yīng)正文對(duì)應(yīng)瀏覽器要下載的內(nèi)容。
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
使用chrom瀏覽器查看http請(qǐng)求及響應(yīng):


curl -o [文件名] www.baidu.com 和wget一樣下載文件
curl -i www.baidu.com 查看頭部信息及網(wǎng)頁(yè)源碼 (-I 只顯示http response的頭信息)
curl -v www.sina.com 顯示一次http通信的整個(gè)過(guò)程,包括端口連接和http request頭信息
具體參考
https://www.cnblogs.com/machao/p/5788425.html :HTTP Method的講解
http://www.ruanyifeng.com/blog/2016/08/http.html :http簡(jiǎn)單講解-阮一峰
https://segmentfault.com/a/1190000013924583 :使用cherom查看http頭部請(qǐng)求和響應(yīng)
http://www.ruanyifeng.com/blog/2011/09/curl.html :curl常見(jiàn)使用-阮一峰