1.關(guān)于HTTP協(xié)議
? HTTP協(xié)議(HyperText Transfer Protocol)及超文本傳輸協(xié)議。首先要明白HTTP是基于TCP的協(xié)議,先建立好TCP連接,才能發(fā)送HTTP請求。并且1.1版本默認(rèn)開啟Keep-Alive,這樣建立的TCP連接可以在多次請求中復(fù)用。還要明白HTTP是無狀態(tài)有會(huì)話的,使用Cookies可以創(chuàng)建有狀態(tài)的會(huì)話。在請求頭方面1.1版本增加更多的請求頭和響應(yīng)頭信息用以增強(qiáng)HTTP的功能例如host主機(jī)頭。
2.HTTP的請求報(bào)文
HTTP的請求報(bào)文主要由請求行,請求頭(請求首部),請求數(shù)據(jù)(正文主體)組成。
第一部分:請求行
| 請求行字段 | 說明 | 其它 |
| ---------------- | --------------- --------------- | ------------------------------------------------------------ |
| GET(RequestMethod) | 通常用于請求服務(wù)端上的某個(gè)資源 | 比如GET請求一個(gè)基于HTTP的API接口獲得JSON字符串,字符串里面是一個(gè)列表,列表中包含你想要獲取的信息 |
| POST(RequestMethod) | 主動(dòng)告訴服務(wù)端一些信息,將客戶端的信息提交到服務(wù)端 | 比如POST請求一個(gè)基于HTTP的API接口,提交想要提交的信息 |
| PUT(RequestMethod) | 向指定的資源位置上傳最新的信息 | 暫無 |
| DELETE(RequestMethod) | 請求服務(wù)端刪除Request-URI指定的資源 | 暫無 |
| URL | 統(tǒng)一資源定位符 | 要獲取的資源的準(zhǔn)確路徑,由協(xié)議,主機(jī)IP或域名端口號, 具體目錄地址構(gòu)成 |
| 協(xié)議版本 | HTTP協(xié)議的版本號 | 比如HTTP/1.1 |
第二部分:請求頭
| 請求頭常見字段 | 說明 |
|---|---|
| Host | 告知服務(wù)端,請求的資源所在的互聯(lián)網(wǎng)主機(jī)名和端口號 |
| User-Agent | 會(huì)將創(chuàng)建請求的的瀏覽器和用戶代理名稱傳遞給服務(wù)端 |
| Accept | 用來告知服務(wù)端,用戶代理所支持的能夠處理的流媒體的類型以及相對優(yōu)先級 |
| Accept-Encoding | 用來告知服務(wù)端,用戶代理所支持的內(nèi)容編碼以及優(yōu)先順序 |
| Accept-Language | 用來告訴服務(wù)端,用戶能夠處理的自然語言集 |
| If-Modified-Since | 告知服務(wù)端若If-Modified-Since字段的值早于資源更新時(shí)間則希望服務(wù)端處理該請求,反之返回304 Not Modified |
| Accept-Charset | 優(yōu)先的字符集 |
第三部分:請求數(shù)據(jù)
| 常見字段 | 說明 |
|---|---|
| Allow | 資源可支持的HTTP方法 |
| Content-Encoding | 實(shí)體使用的編碼格式 |
| Content-Language | 實(shí)體使用的自然語言 |
| Content-Length | 實(shí)體的大小 |
| Content-Location | 替代對應(yīng)資源的URL |
| Content-MD5 | 實(shí)體的報(bào)文摘要 |
| Content-Range | 實(shí)體的位置范圍 |
| Content-Type | 實(shí)體的媒體類型 |
| Expires | 實(shí)體主體的過期時(shí)間 |
| Last-Modified | 資源的最后修改時(shí)間 |
3.HTTP的響應(yīng)報(bào)文
HTTP響應(yīng)報(bào)文主要由狀態(tài)行,響應(yīng)首部,響應(yīng)數(shù)據(jù)(正文實(shí)體)。
第一部分:狀態(tài)行
狀態(tài)行主要包含協(xié)議的版本號,狀態(tài)返回碼,狀態(tài)信息。
| 常見的HTTP狀態(tài)返回碼 | 對應(yīng)的狀態(tài)信息 | 說明 | 其它 |
|---|---|---|---|
| 200 | OK | 請求成功 | 對成功的定義取決于HTTP的請求方法 |
| 301 | Moved Permanently | 永久移動(dòng),被請求的資源永久的移動(dòng)到了新的URL | 永久跳轉(zhuǎn) |
| 304 | Not Modified | 客戶端所請求的資源未修改,服務(wù)器返回此狀態(tài)碼 | 暫無 |
| 400 | Bad Request | 客戶端請求錯(cuò)誤,服務(wù)器無法理解 | 語義有誤或者請求參數(shù)有誤 |
| 401 | Unauthorized | 當(dāng)前請求需要用戶進(jìn)行身份驗(yàn)證 | 暫無 |
| 402 | Payment Required | 保留 | 暫無 |
| 403 | Forbidden | 服務(wù)器理解了客戶端的請求,但是拒絕執(zhí)行它 | 有可能是服務(wù)器或服務(wù)的權(quán)限設(shè)置不當(dāng) |
| 404 | Not Found | 請求失敗,服務(wù)器無法根據(jù)客戶端的請求找到相應(yīng)資源 | 有可能是客戶端請求了服務(wù)器上不存在的資源或者路徑?jīng)]寫準(zhǔn)確 |
| 500 | Internal Server Error | 服務(wù)器內(nèi)部錯(cuò)誤 | 服務(wù)器遇到了不知道如何處理的情況,可能是服務(wù)器的設(shè)置或者內(nèi)部程序的問題 |
| 501 | Not Implemented | 服務(wù)器不支持客戶端的請求方法 | 暫無 |
| 502 | Bad Gateway | 作為網(wǎng)關(guān)或代理的服務(wù)器嘗試請求時(shí),從遠(yuǎn)端獲取到一個(gè)無效的響應(yīng) | 可能是反向代理服務(wù)器下面的節(jié)點(diǎn)出問題 |
| 503 | Service Unavailable | 服務(wù)器由于超載或維護(hù),暫時(shí)無法處理客戶端的請求 ,不可用 | 也可能是反向代理服務(wù)器后面沒有可以提供服務(wù)的節(jié)點(diǎn) |
| 504 | Gateway Time-out | 充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器,未及時(shí)從遠(yuǎn)端服務(wù)器獲取請求 | 可能是反向代理服務(wù)器后面的服務(wù)器過載導(dǎo)致沒有在指定的時(shí)間內(nèi)返回?cái)?shù)據(jù) |
第二部分:響應(yīng)首部
| 常見首部字段 | 說明 |
|---|---|
| ETag | 資源的匹配信息 |
| Server | HTTP服務(wù)器的安裝信息 |
| Vary | 代理服務(wù)器緩存的管理信息 |
第三部分:正文實(shí)體
正文實(shí)體的首部字段可以參考HTTP請求報(bào)文中的正文實(shí)體首部
還有一些通用的首部字段如下
| 字段名 | 說明 |
|---|---|
| Cache-Control | 控制緩存的行為 |
| Connection | 逐跳首部,連接的管理 |
| Date | 創(chuàng)建報(bào)文的日期時(shí)間 |
| Pragma | 報(bào)文指令 |
| Upgrade | 升級為其它協(xié)議 |
| Via | 代理服務(wù)器的相關(guān)信息 |
| Warning | 錯(cuò)誤通知 |
3.補(bǔ)充說明
關(guān)于狀態(tài)碼
204:成功處理請求但是響應(yīng)報(bào)文不包含實(shí)體的主體部分。
206:通過發(fā)送范圍請求頭Range抓取到了資源的部分?jǐn)?shù)據(jù)。(partial content)
301:永久重定向,永久跳轉(zhuǎn)。
302:臨時(shí)重定向,臨時(shí)跳轉(zhuǎn)。
304:服務(wù)端只返回響應(yīng)頭。
400:請求的報(bào)文中存在錯(cuò)誤。
401:求需要認(rèn)證或認(rèn)證失敗導(dǎo)致。
403:可能是訪問了沒有權(quán)限的資源導(dǎo)致的禁止訪問。
404:訪問路徑錯(cuò)誤或訪問的資源已經(jīng)不存在,服務(wù)器找不到客戶端請求的指定頁面。
412:客戶端請求的etag和服務(wù)端的不一致。
416:所請求的范圍無法滿足。
499:服務(wù)器主動(dòng)關(guān)閉客戶端連接。
500:內(nèi)部服務(wù)器錯(cuò)誤,一般是服務(wù)器的設(shè)置或內(nèi)部程序錯(cuò)誤導(dǎo)致。
502:壞的網(wǎng)關(guān),一般是代理服務(wù)器請求后端時(shí)后端服務(wù)不可用或沒有完成響應(yīng)導(dǎo)致的。
503:當(dāng)前服務(wù)不可用,可能是服務(wù)器超載或停機(jī)或反向代理服務(wù)器后端無可用服務(wù)器。
504:網(wǎng)關(guān)超時(shí)一般是后端服務(wù)器沒有在指定的時(shí)間完成處理請求。