本文參考 wiki百科、陶輝老師《Web協(xié)議詳解與抓包實戰(zhàn)》 和 作者在一線多年的運(yùn)維工作總結(jié)希望對大家有所幫助。 常見osi模型(7層) 發(fā)起組織: 國際電信聯(lián)盟電信標(biāo)準(zhǔn)化部門,與國際標(biāo)準(zhǔn)組織(ISO) TCP/IP參考模型(4層) 發(fā)起人 : 文頓·瑟夫 羅伯特·卡恩 本人主要介紹處于應(yīng)用層的HTTP HTTP的發(fā)展是由蒂姆·伯納斯-李于1989年在歐洲核子研究組織(CERN)所發(fā)起。HTTP的標(biāo)準(zhǔn)制定由萬維網(wǎng)協(xié)會(World Wide Web Consortium,W3C)和互聯(lián)網(wǎng)工程任務(wù)組(Internet Engineering Task Force,IETF)進(jìn)行協(xié)調(diào),最終發(fā)布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定義了HTTP協(xié)議中現(xiàn)今廣泛使用的一個版本——HTTP 1.1。 1、HTTP請求方法 HTTP/1.1協(xié)議中共定義了八種方法(也叫“動作”)來以不同方式操作指定的資源: GET 向指定的資源發(fā)出“顯示”請求。使用GET方法應(yīng)該只用在讀取數(shù)據(jù),而不應(yīng)當(dāng)被用于產(chǎn)生“副作用”的操作中,例如在網(wǎng)絡(luò)應(yīng)用程序中。其中一個原因是GET可能會被網(wǎng)絡(luò)蜘蛛等隨意訪問。參見安全方法 HEAD 與GET方法一樣,都是向服務(wù)器發(fā)出指定資源的請求。只不過服務(wù)器將不傳回資源的本文部分。它的好處在于,使用這個方法可以在不必傳輸全部內(nèi)容的情況下,就可以獲取其中“關(guān)于該資源的信息”(元信息或稱元數(shù)據(jù))。 POST 向指定資源提交數(shù)據(jù),請求服務(wù)器進(jìn)行處理(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求本文中。這個請求可能會創(chuàng)建新的資源或修改現(xiàn)有資源,或二者皆有。 PUT 向指定資源位置上傳其最新內(nèi)容。 DELETE 請求服務(wù)器刪除Request-URI所標(biāo)識的資源。 TRACE 回顯服務(wù)器收到的請求,主要用于測試或診斷。 OPTIONS 這個方法可使服務(wù)器傳回該資源所支持的所有HTTP請求方法。用'*'來代替資源名稱,向Web服務(wù)器發(fā)送OPTIONS請求,可以測試服務(wù)器功能是否正常運(yùn)作。 CONNECT HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。通常用于SSL加密服務(wù)器的鏈接(經(jīng)由非加密的HTTP代理服務(wù)器)。 方法名稱是區(qū)分大小寫的。當(dāng)某個請求所針對的資源不支持對應(yīng)的請求方法的時候,服務(wù)器應(yīng)當(dāng)返回狀態(tài)碼405(Method Not Allowed),當(dāng)服務(wù)器不認(rèn)識或者不支持對應(yīng)的請求方法的時候,應(yīng)當(dāng)返回狀態(tài)碼501(Not Implemented)。 HTTP服務(wù)器至少應(yīng)該實現(xiàn)GET和HEAD方法,其他方法都是可選的。當(dāng)然,所有的方法支持的實現(xiàn)都應(yīng)當(dāng)符合下述的方法各自的語義定義。此外,除了上述方法,特定的HTTP服務(wù)器還能夠擴(kuò)展自定義的方法。 2、HTTP版本 2.1 各種版本的版本說明 HTTP/0.9 已過時。只接受GET一種請求方法,沒有在通訊中指定版本號,且不支持請求頭。由于該版本不支持POST方法,因此客戶端無法向服務(wù)器傳遞太多信息。 HTTP/1.0 這是第一個在通訊中指定版本號的HTTP協(xié)議版本,至今仍被廣泛采用,特別是在代理服務(wù)器中。[來源請求] HTTP/1.1 持久連接被默認(rèn)采用,并能很好地配合代理服務(wù)器工作。還支持以管道方式在同時發(fā)送多個請求,以便降低線路負(fù)載,提高傳輸速度。 HTTP/2 2.2 版本對比 及 解決的問題 HTTP/2 相比 HTTP/1.1 的修改并不會破壞現(xiàn)有程序的工作,但是新的程序可以借由新特性得到更好的速度。 HTTP/2 保留了 HTTP/1.1 的大部分語義,例如請求方法、狀態(tài)碼乃至URI和絕大多數(shù)HTTP頭部字段一致。而 HTTP/2 采用了新的方法來編碼、傳輸 客戶端<——>服務(wù)器 間的數(shù)據(jù)。 HTTP/1.1與SPDY的區(qū)別 SPDY (發(fā)音為'speedy') 是一個由 Google 主導(dǎo)的研究項目發(fā)明的HTTP替代協(xié)議。SPDY一開始主要關(guān)注降低延遲,采用了TCP通道,但是使用了不同的協(xié)議來達(dá)到此目的。 其與HTTP/1.1相比,主要的改變有 實現(xiàn)無需先入先出的多路復(fù)用 為簡化客戶端和服務(wù)器開發(fā)的消息—幀機(jī)制 強(qiáng)制性壓縮(包括HTTP頭部) 優(yōu)先級排序 HTTP/2與SPDY的比較 HTTP/2的開發(fā)基于SPDY進(jìn)行躍進(jìn)式改進(jìn)。在諸多修改中,最顯著的改進(jìn)在于,HTTP/2使用了一份經(jīng)過定制的壓縮算法,基于霍夫曼編碼,以此替代了SPDY的動態(tài)流壓縮算法,以避免對協(xié)議的Oracle攻擊——這一類攻擊以CRIME為代表。此外,HTTP/2禁用了諸多加密包,以保證基于TLS的連接的前向安全。 HTTP/2的關(guān)鍵功能主要來自SPDY技術(shù),換言之,SPDY的成果被采納而最終演變?yōu)镠TTP/2 。 2015年9月,Google 宣布了計劃,移除對SPDY的支持,擁抱 HTTP/2,并將在Chrome 51中生效。 HTTP/3 HTTP/3 是即將到來的第三個主要版本的HTTP協(xié)議,使用于萬維網(wǎng)。在HTTP/3中,將棄用TCP協(xié)議,改為使用基于UDP協(xié)議的QUIC協(xié)議實現(xiàn)。QUIC(快速UDP網(wǎng)絡(luò)連接)是一種實驗性的傳輸層網(wǎng)絡(luò)傳輸協(xié)議,由Google開發(fā),該協(xié)議旨在取代TCP協(xié)議,使網(wǎng)頁傳輸更快。 3、HTTP狀態(tài)碼 3.1、什么是HTTP狀態(tài)碼 有誰來維護(hù) 英語:HTTP Status Code)是用以表示網(wǎng)頁服務(wù)器超文本傳輸協(xié)議響應(yīng)狀態(tài)的3位數(shù)字代碼。它由 RFC 2616 規(guī)范定義的,并得到 RFC 2518、RFC 2817、RFC 2295、RFC 2774 與 RFC 4918 等規(guī)范擴(kuò)展。 所有狀態(tài)碼的第一個數(shù)字代表了響應(yīng)的五種狀態(tài)之一。所示的消息短語是典型的,但是可以提供任何可讀取的替代方案。除非另有說明,狀態(tài)碼是HTTP / 1.1標(biāo)準(zhǔn)(RFC 7231)的一部分。 HTTP狀態(tài)碼的官方注冊表由互聯(lián)網(wǎng)號碼分配局(Internet Assigned Numbers Authority)維護(hù)。 3.2、狀態(tài)碼的大致可以分為哪些
3.3、各種狀態(tài)的詳細(xì)解釋 https:/// 1×× Informational 100 Continue 101 Switching Protocols 102 Processing 2×× Success 200 OK 201 Created 202 Accepted 203 Non-authoritative Information 204 No Content 205 Reset Content 206 Partial Content 207 Multi-Status 208 Already Reported 226 IM Used 3×× Redirection 300 Multiple Choices 301 Moved Permanently 302 Found 303 See Other 304 Not Modified 305 Use Proxy 307 Temporary Redirect 308 Permanent Redirect 4×× Client Error 400 Bad Request 401 Unauthorized 402 Payment Required 403 Forbidden 404 Not Found 405 Method Not Allowed 406 Not Acceptable 407 Proxy Authentication Required 408 Request Timeout 409 Conflict 410 Gone 411 Length Required 412 Precondition Failed 413 Payload Too Large 414 Request-URI Too Long 415 Unsupported Media Type 416 Requested Range Not Satisfiable 417 Expectation Failed 418 I'm a teapot 421 Misdirected Request 422 Unprocessable Entity 423 Locked 424 Failed Dependency 426 Upgrade Required 428 Precondition Required 429 Too Many Requests 431 Request Header Fields Too Large 444 Connection Closed Without Response 451 Unavailable For Legal Reasons 499 Client Closed Request 5×× Server Error 500 Internal Server Error 501 Not Implemented 502 Bad Gateway 503 Service Unavailable 504 Gateway Timeout 505 HTTP Version Not Supported 506 Variant Also Negotiates 507 Insufficient Storage 508 Loop Detected 510 Not Extended 511 Network Authentication Required 599 Network Connect Timeout Error 4.4、需要約束程序中的狀態(tài)碼? 需要、每個公司都需要定義好 或者 公司自己約束好各種狀態(tài)的返回情況 筆者當(dāng)年隨便返回狀態(tài)碼,讓前端同學(xué)或者后端接口調(diào)用的時候 拋錯的無法理解。 另外移動端開放同學(xué) 可能會報出更加準(zhǔn)確的錯誤信息。 |
|