Http protocal
https://tools.ietf.org/html/rfc2616
1. 狀態碼:status code
1xxx:信息--請求被接收,繼續下一步處理 2xxx:成功--請求行為被成功接收、理解和接受 3xxx:重定向--需要進一步的處理來完成請求 4xxx:客戶端錯誤--請求包含錯誤的語法或者無法處理 5xxx:服務器錯誤--服務器無法處理合理的請求 100:CONTINUE 請求已接受,請繼續發送信息, 101:Switch Protocal 協議轉換,Upgrade 更先進的協議 200:OK GET 請求的資源對象;HEAD 對應請求資源的 entity-header 字段,不包含消息體;POST;請求行為的結果消息體;TRACE: 包含請求消息的消息體 201:Created 請求處理完成,資源已創建。 202:(Accepted)請求接收,處理還未完成,使得客戶端及時了解資源請求狀況,監視進度 203: 204:No Content 請求處理完成,但是不需要返回消息體 205:Reset Content 服務器完成請求,客戶端刷新view 206:Partial Content 回復包含 Range或者If-Range請求頭的GET請求 300:Mutiple Choices,服務器返回包含可用資源列表的消息體供客戶端選擇,如果客戶端一開始就有傾向,則需要在頭信息 Location添加特殊URI信息,客戶端可以使用此信息自動選擇。 301:Move Permanently,請求資源永久重定向,服務器使用Location返回重定向URI,對于GET HEAD請求,客戶端不能自動重定向請求 302:Found 臨時重定向,其它同上 303:See Other,資源在其它路徑,可以通過GET獲取 304:Not Modify 客戶端已緩存資源,并且服務器端為左更改,緩存可以繼續使用 305:Use Proxy 必須使用代理反問資源,服務器使用Location返回代理資源路徑 306:Unused 未使用 307:Temporary Redirect 400:Bad Request,語法錯誤,服務器無法處理 401:Unauthorized 未授權,需要請求信息包含 authentication: basic digest access authentication 402:未使用 403:Forbidden,理解請求,拒絕服務, 404:Not Found 405:Method Not Allowed 請求方法不允許,服務器返回allow:允許的方法頭信息 406:Not Acceptable 無法滿足所有的消息頭要求;返回消息體,包含所能提供的資源表現形式的列表,允許用戶手動進行選擇。 407:Proxy Authentication Required 代理權限驗證,代理返回Proxy-Authenticate:驗證說明,客戶端重新發送帶有Proxy-Authorization頭信息 408:Request Time Out: 409:Conflict 請求資源沖突,例如多客戶段請求修改MVVC控制的資源 。。。 500:Internal Server Error 服務器內部錯誤 501:Not Implementd 未實現能完成請求的方法功能 502:Bad Gateway 網關錯誤 503:Service Unavalible 當前服務不可用,可以擇機retry 504:Gateway Timeout 505:Http Version Not Supported entity-body:= Content-Encoding(Content-Type(data)) 沒有默認的encoding
2. 消息類型:content-type
任何http/1.1消息,如果包含消息體,則必須在消息頭上包含一個Content-type,如果未設置,接收方會嘗試通過檢查消息內容,或者根據url攜帶的資源名稱擴展來判斷消息類型。如果還是無法確定,則使用application/octet-stream
3. 消息長度:entity-length
entity-length 是指編碼之前的消息體長度,transfer-length 是指編碼之后的消息體長度。
4. 長連接:keepalive
持久化的http連接:http/1.1產生并默認 頻繁的tcp連接:增加性能開銷。網絡負擔,內存消耗及時效性浪費 節省端點(routers、hosts(clients、servers、proxies、gateways、tunnels、caches))cpu消耗 TCP control block memory used saved in hosts 節省主機TCP控制塊內存消耗 pipelined操作,可以連續發送請求,而不必等待每一個回復。較小的elapsed time,使的單條TCP連接使用更有效率。 減少頻繁tcp握手連接,關閉產生的報文對網絡的影響,因為不需要每一次的握手建立連接,減少了后續請求延遲。 錯誤信息反饋不需要關閉當前TCP連接,再重新打開連接發送。發送錯誤信息后,連接依然維持 Connection:close 關閉連接,如果客戶端指向發送單次請求,然后關閉連接,則需要在頭信息里添加Connection:close。 持久化連接發送的消息必須寫到消息長度
5. Pipeline:客戶端順序發送請求,服務器按相同的順序發送回復。
pipeline消息只能建立在持久TCP連接上,并做好重發準備,如果服務器沒有回復pipeline請求的所有消息,客戶端也應該重發請求。 pipeline的請求必須是冪等的,
6. proxy:
對于代理,是分別和客戶端和服務器建立了持久的連接, 客戶端,服務器,代理需要能夠從不同的連接關閉事件中恢復。 客戶端需要重新打開連接,發送丟失的請求 服務端一個連接需要至少回復一個請求,在回復所有請求前,不應該關閉連接 客戶端需要限制同時連接到服務器的請求N,一般限制為N=2個;代理則至多使用2N個連接 TCP流控制機制 flow control mechanism
7. 監控連接錯誤信息:
當接收到錯誤信息后,應該立馬終止消息傳送; 當以 chunk 編碼發送時,應該發送一條長度為0的chunk,結合 empty trailer 來告知接收方消息的結束。 當Content-length 頭信息存在時,客戶端需要立馬關閉連接
8. status:100
作用:用作客戶端在發送消息體之前,請求判斷消息接收端是否愿意接收消息(根據請求頭信息) 操作:客戶端需發送 Expect: 100-continue 附注:如果不需要發送消息體,則不要發送此頭信息 服務器端接收到包含 Expect: 100-continue 頭信息的請求時,需要立馬回復status 100,并繼續讀取消息,或者回復最終的消息狀態碼(之后可能終止連接或者接受并丟棄消息)。 一般來說,服務器不要回復100給未發送Expect: 100-continue頭信息的請求,及來自http/1.0版本的請求。 例外: http/1.1為了compatibility with RFC2068,對于put、post請求,服務器會添加100 回復,以減少內置等待100客戶端的處理延遲。 服務器: 服務器在接收到部分或者全部消息體時,可能會回復100。 服務器發送完100后,也必須最終發送最終處理狀態。 服務器接收完消息前,不能關閉連接 代理: 代理在能夠確定轉發服務器為http/1.1,或者不知道轉發服務器協議版本時,必須完整轉發包包含Expect: 100-continue頭信息的請求。 代理在能夠確定轉發服務器為http/1.0時,不能轉發此請求,并回復417狀態(expection field) 代理應該緩存最近轉發的服務器的協議版本信息。 代理不應該想使用http/1.0版本發送的未帶Expect: 100-continue頭信息的請求回復100狀態碼;
9. http/1.1 host 頭信息需求。
Options:為了在請求前獲取url請求路徑上的相關信息 200回復,需要在頭信息中包含所有的服務器端對于請求資源支持的信息;Content-length需求。 Max-Forwards:指定到達請求臉上的某個代理,獲取相應的信息,當收到options請求時,代理需要檢查Max-Forwards字段,當為0時,不能在轉發此消息,而需要返回自己的通訊選項信息。當大于0,直接轉發請求。 不能中途添加此頭信息。 “conditional GET” if the request message includes an IfModified-Since, If-Unmodified-Since, If-Match, If-None-Match, or If-Range header field: 傳送滿足頭信息if條件的資源,減少網路傳輸 “partial GET” if the request message includes a Range header field. 獲取部分資源請求。 Head方法除了服務器回復信息不能包含消息體外,其它與GET一樣 PUT:存在更新,不存在創建 資源創建-》201,資源更新-》200 | 204 接收方不能忽略任何無法解析的Content-*頭信息,并且需要回復501(not implemented) 對比與POST,PUT請求的資源非常明確,如果需要處理額外的資源,需要服務器返回重定向 DELETE: 刪除資源,明確資源刪除回復200,204 if no response entity,請求接收,為執行完,返回202(Accepted) TRACE: 測試,診斷路徑host,收到方需要將請求信息當作消息體(Content-type:message/http)返回200 TRACE請求不能包含消息體 不能緩存 CONNECT: 代理建立通道使用 referer:告知從哪個地址鏈接過來的 Http:半雙工,單向流動,
其它:
輪訓:間隔的發送請求,獲取信息;處理低信息率情景,會浪費太多連接。 長輪訓:客戶端保持請求連接特定時間,直到請求的信息可用,或者到達超時時間,然后再重新發起連接。缺乏標準實現。 流化技術:客戶端發送一個請求,服務端發送并維護一個持續更新和保持打開(設定時間)的響應。pingpong;防火墻和代理影響。 TCP:全雙工。 websocket:自然的全雙工,雙向,單套接字連接。單一請求。
總結
以上是生活随笔為你收集整理的Http protocal的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XP/Win7/Win8/Win10系统
- 下一篇: pbem00是什么意思