作者:Gakki
01. HTML 簡(jiǎn)介
- HTTP 協(xié)議是 Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于從萬(wàn)維網(wǎng)(WWW:World Wide Web )服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。
- HTTP 是一個(gè)基于 TCP/IP 通信協(xié)議來(lái)傳遞數(shù)據(jù)。HTTP 是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議。
- HTTP 協(xié)議工作于客戶端-服務(wù)端架構(gòu)為上。瀏覽器作為 HTTP 客戶端通過(guò) URL 向 HTTP 服務(wù)端即 WEB 服務(wù)器發(fā)送所有請(qǐng)求。WEB 服務(wù)器根據(jù)接收到的請(qǐng)求后,向客戶端發(fā)送響應(yīng)信息。
02. 主要特點(diǎn)
- 簡(jiǎn)單快速:客戶向服務(wù)器發(fā)送請(qǐng)求服務(wù)時(shí),只需傳送請(qǐng)求方法和路徑。請(qǐng)求方法常用的有:GET、POST、DELETE等。由于 HTTP 協(xié)議簡(jiǎn)單,所以 HTTP 服務(wù)器的程序規(guī)模小,因此通信速度很快。
- 靈活:HTTP 協(xié)議允許傳輸任意類型的數(shù)據(jù)對(duì)象。傳輸?shù)念愋陀?Content-Type 加以標(biāo)記。
- 無(wú)連接:限制每次連接只處理一個(gè)請(qǐng)求。服務(wù)器處理完請(qǐng)求,并收到客戶的應(yīng)答后,即斷開連接,采用這種方式可以節(jié)省傳輸時(shí)間。但是卻不利于客戶端與服務(wù)器保持會(huì)話連接。
- 無(wú)狀態(tài):是指協(xié)議對(duì)于事物處理沒(méi)有記憶能力。無(wú)狀態(tài)意味著如果后續(xù)處理需要前面的信息,它必須重新傳遞,這樣就可能導(dǎo)致每次連接傳遞的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時(shí),它的應(yīng)答就比較快速。為了彌補(bǔ)這個(gè)缺點(diǎn),產(chǎn)生了兩個(gè) HTTP 狀態(tài)的技術(shù)。即:Cookie 與 Session 。
- 支持 B/S 及 C/S 模式
03. URL
- URL(Uniform Resource Locator):統(tǒng)一資源定位符;負(fù)責(zé)標(biāo)識(shí)萬(wàn)維網(wǎng)上的各種文檔,并使每個(gè)文檔在整個(gè)萬(wàn)維網(wǎng)的范圍內(nèi)具有唯一的標(biāo)識(shí)符 URL。
- 下面以這個(gè)URL為例,介紹下普通URL的各部分組成:
http://www.itdecent.cn:80080/u/3f6551b9da15.html?id=312312&page=3#work
一個(gè)完整的 URL 包括以下部分:- 傳輸協(xié)議:用來(lái)傳輸客戶端和服務(wù)器交互信息的;常用的傳輸協(xié)議:HTTP、HTTPS、FTP;本例中使用的是 HTTPS 協(xié)議。在 " https " 后面的 “ // ” 為分隔符。
- 域名:該 URL 的域名部分為“www.itdecent.cn”。一個(gè) URL 中,也可以使用IP地址作為域名使用。
- 端口部分:用來(lái)區(qū)分同一臺(tái)服務(wù)器上不同的服務(wù)的標(biāo)識(shí),不同服務(wù)之間一般是不能使用相同的端口號(hào)的。HTTP 端口號(hào) 80;HTTPS 默認(rèn)端口號(hào) 443;FTP 默認(rèn)端口號(hào) 21。跟在域名后面的是端口號(hào),域名和端口之間使用 “ : ” 作為分隔符,端口不是一個(gè) URL 必須的部分,如果省略端口部分,將采用默認(rèn)端口號(hào)。
- 路徑:以 “ / ” 字符區(qū)別路徑中的每一個(gè)目錄名稱。
- 查詢:以 “ ? ” 為起到,每個(gè)參數(shù)以 “ & ” 隔開,再以 “ = ” 分開參數(shù)名稱與數(shù)據(jù)。
- 片段:以 “ # ” 字符為起點(diǎn)。
04. 報(bào)文結(jié)構(gòu)

請(qǐng)求報(bào)文

響應(yīng)報(bào)文
- HTTP 請(qǐng)求報(bào)文和響應(yīng)報(bào)文都由三個(gè)部分組成,兩種報(bào)文格式的區(qū)別是開始行不同。
GET 請(qǐng)求:
GET /users/3f6551b9da15/courses?page=1&count=10 HTTP/1.1
Host: www.itdecent.cn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: application/json
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
- 請(qǐng)求行:請(qǐng)求方法( GET ) + 統(tǒng)一資源標(biāo)識(shí)符( /users/3f6551b9da15/courses?page=1&count=10 ) + 所使用的 HTTP 版本( HTTP/1.1 )。如:GET /users/3f6551b9da15/courses?page=1&count=10 HTTP/1.1。
- 請(qǐng)求頭部:用來(lái)說(shuō)明服務(wù)器要使用的附加信息。從第二行起為請(qǐng)求頭部。
- 空行:請(qǐng)求頭部后面的空行是必須的。即使第四部分的請(qǐng)求數(shù)據(jù)為空,也必須有空行。
- 請(qǐng)求數(shù)據(jù):也叫主體,可以添加任意的其他數(shù)據(jù)。
GET 響應(yīng):
HTTP/1.1 200 OK
Server: Tengine
Date: Tue, 08 Feb 2022 10:14:34 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Content-Encoding: gzip
- 狀態(tài)行:HTTP 版本 ( HTTP/1.1 ) + 狀態(tài)碼 ( 200 ) + 狀態(tài)碼描述 ( OK ) ;如:HTTP/1.1 200 OK。
- 響應(yīng)頭部:用來(lái)說(shuō)明客戶端要使用的一些附加信息。字段名 + 冒號(hào) + 值;如:Content-Type: application/json; charset=utf-8。
- 空行:消息報(bào)文后面的空行是必須的。
- 響應(yīng)正文:服務(wù)器返回給客戶端的文本信息。
HTTP 響應(yīng)狀態(tài)碼
-
最常見(jiàn)的 HTTP 狀態(tài)碼:
- 200:請(qǐng)求成功
- 301:資源(網(wǎng)頁(yè)等)被永久轉(zhuǎn)移到其他 URL
- 404:請(qǐng)求的資源(網(wǎng)頁(yè)等)不存在
- 500:內(nèi)部服務(wù)器錯(cuò)誤
HTTP 狀態(tài)碼分類共分為 5 類:
| 分類 | 描述 |
|---|---|
| 1** | 信息,服務(wù)器收到請(qǐng)求,需要請(qǐng)求者繼續(xù)執(zhí)行操作 |
| 2** | 成功,操作被成功接收并處理 |
| 3** | 重定向,需要進(jìn)一步的操作已完成請(qǐng)求 |
| 4** | 客戶端錯(cuò)誤,請(qǐng)求包含語(yǔ)法錯(cuò)誤或無(wú)法完成請(qǐng)求 |
| 5** | 服務(wù)器錯(cuò)誤,服務(wù)器在處理請(qǐng)求的過(guò)程中發(fā)生了錯(cuò)誤 |
常見(jiàn)的 HTTP 狀態(tài)碼
HTTP 常用的請(qǐng)求方式、區(qū)別和用途
TCP 連接與釋放相關(guān)的核心問(wèn)題
TCP/IP 三次握手四次分離
HTTP 常用的請(qǐng)求方式、區(qū)別和用途
HTTP和HTTPS協(xié)議?
常見(jiàn)的 HTTP 狀態(tài)碼
GET與POST的區(qū)別?
關(guān)于Token、Session、Cookie的區(qū)別
SSL認(rèn)證與CA認(rèn)證的區(qū)別