HTTP 請求

HTTP 原理

HTTP 是應(yīng)用層協(xié)議,通過 TCP 實(shí)現(xiàn)可靠傳輸,能夠保證數(shù)據(jù)的完整性、正確性。

C/S 架構(gòu)的交互流程

  1. 客戶端執(zhí)行網(wǎng)絡(luò)請求,從 URL 解析服務(wù)端的主機(jī)名
  2. 主機(jī)名解析成 IP 地址
  3. 從 URL 解析出端口號
  4. 建立客戶端到服務(wù)端的 TCP 連接
  5. 客戶端通過輸出流向服務(wù)端發(fā)送一條 HTTP 請求
  6. 服務(wù)端向客戶端回送一條 HTTP 響應(yīng)報(bào)文
  7. 客戶端從輸入流獲取報(bào)文
  8. 客戶端解析報(bào)文,關(guān)閉連接
  9. 客戶端將結(jié)果顯示在 UI

HTTP 請求方式

HTTP 常見請求方式有 GET、POST、DELETE、PUT、HEAD、TRACE、OPTIONS。

GET

用來獲取服務(wù)器中的某個(gè)資源

POST

用來向服務(wù)器傳遞數(shù)據(jù),比如遞交 HTML 表單

PUT

用來向服務(wù)器寫入資源。有些發(fā)布系統(tǒng)允許用戶創(chuàng)建 Web 頁面,并用 PUT 直接將其傳輸?shù)?Web 服務(wù)器上

DELETE

用來請服務(wù)器刪除 URL 所指定的資源。但是,客戶端應(yīng)用程序無法保證刪除操作一定會被執(zhí)行。因?yàn)?,HTTP 規(guī)范允許服務(wù)器在不通知客戶端的情況下撤銷請求

HEAD

與 GET 方法行為類型,但是服務(wù)器在響應(yīng)中只返回首部。不會返回實(shí)體的主體部分。這就允許客戶端在未獲取實(shí)際資源的情況下,對資源的首部進(jìn)行檢查。

TRACE

TRACE 方法允許客戶端在最終將請求發(fā)送給服務(wù)器時(shí),看看它變成什么樣子。TRACE 請求會在目的服務(wù)器端發(fā)起一個(gè)“環(huán)回”診斷。行程最后一站的服務(wù)器會彈回一條 TRACE 響應(yīng),并在響應(yīng)主體中攜帶它收到的原始請求報(bào)文。這樣客戶端就可以查看在所有中間 HTTP 應(yīng)用程序組成的請求/響應(yīng)鏈上,原始報(bào)文是否以及如何被毀壞或修改過。

OPTIONS

OPTIONS 方法請求 Web 服務(wù)器告知其支持的各種功能。可以詢問服務(wù)器通常支持哪些方法,或者對某些特殊資源支持哪些方法(有些服務(wù)器可能只支持對一些特殊類型對象使用特定的操作)。這為客戶端應(yīng)用程序提供了一種手段,使其不用實(shí)際訪問那些資源就能判定訪問各種資源的最優(yōu)方式。

HTTP 報(bào)文格式解析

HTTP 請求報(bào)文由請求行(request line)、請求頭部(header)、空行和請求數(shù)據(jù) 4 個(gè)部分組成。

|請求方法 | 空格 | URL | 空格 | HTTP 版本 | 回車符 | 換行符 |
| ----------頭部字段名:值 --------- | 回車符 | 換行符 |
|------回車符 -----------|------- 換行符---------- |
|-------------------請求數(shù)據(jù)-------------------- |

1.起始行
報(bào)文的第一行就是起始行,在請求報(bào)文中用來說明要以什么方式做什么請求,而在響應(yīng)報(bào)文中粗略說明了報(bào)文的執(zhí)行結(jié)果。

2.首部字段
起始行后面有零個(gè)或者多個(gè)首部字段。每個(gè)首部字段都包含一個(gè)名字和一個(gè)值,為了便于解析,兩者之間用冒號(如 Connection:Keep-Alive)來分隔。首部以一個(gè)空行結(jié)束。添加一個(gè)首部字段和添加新行一樣簡單。

3.主體
首部字段的空行之后就是可選的報(bào)文主體,其中包含了所有類型的數(shù)據(jù)。請求主體中包括了要發(fā)給 Web 服務(wù)器的數(shù)據(jù);響應(yīng)主體中裝載了要返回給客戶端的數(shù)據(jù)。起始行和首部都是結(jié)構(gòu)化的文本形式,而主體可以包含任意的二進(jìn)制數(shù)據(jù)(如圖片、視頻、音軌、軟件程序)。當(dāng)然,主體中也可以包含文本。

響應(yīng)報(bào)文

HTTP 響應(yīng)也由 3 個(gè)部分組成,分別是:狀態(tài)行、消息報(bào)頭、響應(yīng)正文。

<狀態(tài)行>
<響應(yīng)報(bào)文 header>
<空行>
[響應(yīng)報(bào)文內(nèi)容]

在響應(yīng)中唯一真正的區(qū)別在于第一行中用狀態(tài)信息代替了請求信息。狀態(tài)行(status line)通過提供一個(gè)狀態(tài)碼來說明請求的資源情況。

狀態(tài)行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version 表示服務(wù)器 HTTP 協(xié)議的版本;Status-Code 表示服務(wù)器發(fā)回的響應(yīng)狀態(tài)代碼;Reason-Phrase 表示狀態(tài)代碼的文本描述。狀態(tài)代碼由 3 位數(shù)字組成,第一個(gè)數(shù)字定義了響應(yīng)的類別,有 5 中可能取值。

取值范圍 含義
100-199 指示信息-表示請求已經(jīng)接收,繼續(xù)處理
200-299 請求成功。表示請求已經(jīng)被成功接收、理解
300-399 重定向。要完成請求必須做進(jìn)一步操作
400-499 客戶端錯(cuò)誤。請求有語法錯(cuò)誤或請求無法實(shí)現(xiàn)
500-599 服務(wù)器端錯(cuò)誤。服務(wù)器未能實(shí)現(xiàn)合法請求

常見狀態(tài)代碼

代碼 狀態(tài) 說明
200 OK 客戶端請求成功
400 Bad Request 客戶端請求有語法錯(cuò)誤,不能被服務(wù)器所理解
401 Unauthorized 請求未經(jīng)授權(quán)
403 Forbidden 服務(wù)器收到請求,但是拒絕提供服務(wù)
404 Not Found 請求資源不存在
500 Internal Server Error 服務(wù)器發(fā)生不可預(yù)期錯(cuò)誤
503 Server Unavailable 服務(wù)器當(dāng)前不能處理客戶端的請求
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本篇文章篇幅比較長,先來個(gè)思維導(dǎo)圖預(yù)覽一下。 一、概述 1.計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)分層 2.TCP/IP 通信傳輸流 ...
    滌生_Woo閱讀 56,215評論 24 557
  • 1. 網(wǎng)絡(luò)基礎(chǔ)TCP/IP HTTP基于TCP/IP協(xié)議族,HTTP屬于它內(nèi)部的一個(gè)子集。 把互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集...
    yozosann閱讀 3,610評論 0 20
  • 本文是《圖解HTTP》讀書筆記的第二篇,主要包括此書的第六章內(nèi)容,因?yàn)榈诹碌膬?nèi)容較多,而且比較重要,所以單獨(dú)寫為...
    lijiankun24閱讀 1,502評論 0 6
  • 當(dāng)我們在瀏覽器的地址欄輸入 www.linux178.com ,然后回車,回車這一瞬間到看到頁面到底發(fā)生了什么呢?...
    Ddaidai閱讀 1,287評論 0 12
  • 20歲這年,一直很想擁有屬于自己的一本原創(chuàng)書,總覺得自己喜歡寫,也可以寫出好的文章,每次到了真正要寫的時(shí)候,咬...
    墨跡流痕閱讀 353評論 4 6

友情鏈接更多精彩內(nèi)容