1. HTTP簡(jiǎn)介
HTTP(超文本傳輸協(xié)議,Hypertext Transfer Protocol)是一種用于傳輸超文本數(shù)據(jù)(如HTML、圖片、視頻等)的應(yīng)用層協(xié)議。它允許互聯(lián)網(wǎng)上的客戶端和服務(wù)器之間通過(guò)請(qǐng)求和響應(yīng)進(jìn)行雙向通信。HTTP 是互聯(lián)網(wǎng)的基石,為 Web 瀏覽器和 Web 服務(wù)器之間的數(shù)據(jù)交換提供了標(biāo)準(zhǔn)規(guī)范。
HTTP 基于請(qǐng)求-響應(yīng)模型。客戶端(通常是 Web 瀏覽器)向服務(wù)器發(fā)送請(qǐng)求,請(qǐng)求中包含所需資源的 URL、請(qǐng)求方法(如 GET、POST 等)和可選的其他信息(如頭部信息、請(qǐng)求正文等)。服務(wù)器接收到請(qǐng)求后,處理并返回一個(gè)響應(yīng),其中包含響應(yīng)狀態(tài)碼(如 200 表示成功,404 表示未找到資源等),響應(yīng)頭部信息和響應(yīng)正文(如HTML文檔、圖片等)。
HTTP 是無(wú)狀態(tài)協(xié)議,這意味著每個(gè)請(qǐng)求都是獨(dú)立的,服務(wù)器不會(huì)存儲(chǔ)關(guān)于之前請(qǐng)求的信息。盡管如此,通常會(huì)使用 Cookie 等技術(shù)在客戶端和服務(wù)器之間維護(hù)狀態(tài)信息。
HTTP/1.1 是最常用的 HTTP 版本,但隨著互聯(lián)網(wǎng)的發(fā)展,HTTP/2 和 HTTP/3(基于 QUIC 協(xié)議)等更高效的版本逐漸普及。這些新版本在性能、安全性和可靠性方面進(jìn)行了改進(jìn),以滿足現(xiàn)代 Web 應(yīng)用的需求。
2. HTTP工作原理
HTTP(超文本傳輸協(xié)議)是基于請(qǐng)求-響應(yīng)模型的應(yīng)用層協(xié)議,用于在客戶端(如 Web 瀏覽器)和服務(wù)器之間傳輸超文本數(shù)據(jù)(如 HTML、圖片、視頻等),它工作于客戶端-服務(wù)端架構(gòu)上。瀏覽器作為 HTTP 客戶端通過(guò) URL 向 HTTP 服務(wù)端
即 WEB 服務(wù)器發(fā)送所有請(qǐng)求。
Web 服務(wù)器有:Apache 服務(wù)器,IIS 服務(wù)器(Internet Information Services)等。
Web 服務(wù)器根據(jù)接收到的請(qǐng)求后,向客戶端發(fā)送響應(yīng)信息。
HTTP 默認(rèn)端口號(hào)為 80,但是你也可以改為 8080 或者其他端口。
下面是 HTTP 的工作原理的詳細(xì)介紹:
-
建立連接:
客戶端(如瀏覽器)首先需要與服務(wù)器建立連接。在 HTTP/1.1 中,這通常通過(guò)建立一個(gè) TCP 連接來(lái)實(shí)現(xiàn)。而在 HTTP/3 中,使用基于 UDP 的 QUIC 協(xié)議建立連接。連接建立后,客戶端和服務(wù)器可以進(jìn)行雙向通信。 -
發(fā)送請(qǐng)求:
客戶端向服務(wù)器發(fā)送一個(gè) HTTP 請(qǐng)求。請(qǐng)求包含以下幾個(gè)部分:- 請(qǐng)求行:包括請(qǐng)求方法(如 GET、POST 等)、請(qǐng)求的 URL(統(tǒng)一資源定位符)和 HTTP 版本。
- 請(qǐng)求頭部:包含一些描述請(qǐng)求的元數(shù)據(jù),例如客戶端類型(User-Agent)、支持的內(nèi)容類型(Accept)等。
- 空行:用于分隔請(qǐng)求頭部和請(qǐng)求正文。
- 請(qǐng)求正文(可選):包含要發(fā)送給服務(wù)器的數(shù)據(jù),例如 POST 請(qǐng)求中的表單數(shù)據(jù)。
-
服務(wù)器處理請(qǐng)求:
接收到請(qǐng)求后,服務(wù)器會(huì)解析請(qǐng)求并根據(jù)請(qǐng)求內(nèi)容進(jìn)行處理。這可能包括查詢數(shù)據(jù)庫(kù)、執(zhí)行服務(wù)器端腳本等操作。 -
發(fā)送響應(yīng):
服務(wù)器處理完請(qǐng)求后,會(huì)向客戶端發(fā)送一個(gè) HTTP 響應(yīng)。響應(yīng)包含以下幾個(gè)部分:- 狀態(tài)行:包括 HTTP 版本、狀態(tài)碼(如 200 表示成功,404 表示未找到資源等)和狀態(tài)描述。
- 響應(yīng)頭部:包含一些描述響應(yīng)的元數(shù)據(jù),例如內(nèi)容類型(Content-Type)、內(nèi)容長(zhǎng)度(Content-Length)等。
- 空行:用于分隔響應(yīng)頭部和響應(yīng)正文。
- 響應(yīng)正文:包含要返回給客戶端的數(shù)據(jù),例如 HTML 文檔、圖片、視頻等。
-
關(guān)閉連接:
在數(shù)據(jù)傳輸完成后,客戶端和服務(wù)器根據(jù)請(qǐng)求頭部中的“Connection”字段來(lái)決定是保持連接(keep-alive)以便后續(xù)請(qǐng)求復(fù)用,還是關(guān)閉連接。在 HTTP/1.0 中,默認(rèn)為關(guān)閉連接,而在 HTTP/1.1 及以后的版本中,默認(rèn)為保持連接。
3. HTTP注意事項(xiàng)
-
了解 HTTP 的無(wú)連接性:HTTP 是無(wú)連接協(xié)議,這意味著每次連接只處理一個(gè)請(qǐng)求。服務(wù)器處理完客戶的請(qǐng)求并收到客戶的應(yīng)答后,即斷開(kāi)連接。采用這種方式可以節(jié)省傳輸時(shí)間。但請(qǐng)注意,在 HTTP/1.1 及以后的版本中,默認(rèn)使用“keep-alive”機(jī)制,可讓連接在處理多個(gè)請(qǐng)求時(shí)保持打開(kāi)狀態(tài),以減少建立和關(guān)閉連接所需的時(shí)間和資源消耗。
-
理解 HTTP 的媒體獨(dú)立性:HTTP 是媒體獨(dú)立的,這意味著只要客戶端和服務(wù)器知道如何處理的數(shù)據(jù)內(nèi)容,任何類型的數(shù)據(jù)都可以通過(guò) HTTP 發(fā)送??蛻舳艘约胺?wù)器指定使用適合的 MIME-type 內(nèi)容類型。確保使用正確的 MIME 類型以便正確傳輸和處理數(shù)據(jù)。
-
認(rèn)識(shí) HTTP 的無(wú)狀態(tài)性:HTTP 是無(wú)狀態(tài)協(xié)議,這意味著協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快。為了在客戶端和服務(wù)器之間維護(hù)狀態(tài)信息,可以使用 Cookie 等技術(shù)。
-
選擇合適的請(qǐng)求方法:使用正確的 HTTP 請(qǐng)求方法(如 GET、POST、PUT、DELETE 等)是非常重要的。例如,GET 方法用于獲取資源,而 POST 用于創(chuàng)建或修改資源。使用正確的請(qǐng)求方法有助于遵循 RESTful 架構(gòu)原則,提高應(yīng)用的可維護(hù)性和可擴(kuò)展性。
-
使用 HTTPS:為了保護(hù)數(shù)據(jù)的安全性和隱私,建議使用 HTTPS(HTTP 安全)而非 HTTP。HTTPS 在 HTTP 上添加了 SSL/TLS 加密層,確保數(shù)據(jù)在傳輸過(guò)程中的安全性和完整性。
-
有效利用緩存:使用緩存機(jī)制(如 ETag、Cache-Control 等)可以提高性能和減輕服務(wù)器負(fù)載。合理設(shè)置緩存策略可以確??蛻舳嗽谛枰獣r(shí)獲取最新數(shù)據(jù),同時(shí)避免不必要的請(qǐng)求。
-
遵循 HTTP 狀態(tài)碼規(guī)范:正確使用 HTTP 狀態(tài)碼可以幫助客戶端更好地理解服務(wù)器響應(yīng)。例如,使用 200 表示成功,404 表示資源未找到,500 表示服務(wù)器內(nèi)部錯(cuò)誤等。遵循狀態(tài)碼規(guī)范可以提高應(yīng)用的可維護(hù)性和可讀性。
-
優(yōu)化請(qǐng)求和響應(yīng)頭部:減小請(qǐng)求和響應(yīng)頭部的大小可以降低延遲和帶寬消耗。移除不必要的頭部信息、使用壓縮等方法可以優(yōu)化頭部傳輸。
-
使用更高效的 HTTP 版本:盡量使用較新的 HTTP 版本(如 HTTP/2 或 HTTP/3),這些版本在連接管理、數(shù)據(jù)傳輸?shù)确矫孢M(jìn)行了優(yōu)化,以提高性能和可靠性。
-
限制和管理并發(fā)請(qǐng)求:合理設(shè)置并發(fā)請(qǐng)求的數(shù)量和速率可以避免服務(wù)器過(guò)載??梢允褂藐?duì)列、限流等技術(shù)來(lái)實(shí)現(xiàn)并發(fā)請(qǐng)求的管理。
-
避免使用明文傳輸敏感數(shù)據(jù):在發(fā)送包含敏感信息(如密碼、身份證號(hào)等)的請(qǐng)求時(shí),務(wù)必使用加密技術(shù)(如 HTTPS、加密算法等)來(lái)確保數(shù)據(jù)的安全性。
-
使用身份驗(yàn)證和授權(quán):為了保護(hù)資源的安全性,使用合適的身份驗(yàn)證(如基本認(rèn)證、OAuth2 等)和授權(quán)機(jī)制來(lái)控制對(duì)資源的訪問(wèn)。
-
了解跨域限制:瀏覽器的同源策略限制了不同源之間的資源訪問(wèn)。了解 CORS(跨域資源共享)策略及其限制可以幫助正確處理跨域請(qǐng)求。
4. HTTP消息結(jié)構(gòu)
HTTP(超文本傳輸協(xié)議,Hypertext Transfer Protocol)是基于客戶端/服務(wù)器端(Client/Server, C/S)架構(gòu)模型的應(yīng)用層協(xié)議,其主要作用是在互聯(lián)網(wǎng)上進(jìn)行信息交流。HTTP 是一種無(wú)狀態(tài)的請(qǐng)求/響應(yīng)協(xié)議,意味著服務(wù)器不會(huì)保存關(guān)于客戶端的請(qǐng)求歷史信息。
HTTP 客戶端通常是一個(gè)應(yīng)用程序,例如 Web 瀏覽器或其他類型的客戶端軟件??蛻舳送ㄟ^(guò)建立連接來(lái)向服務(wù)器發(fā)送一個(gè)或多個(gè) HTTP 請(qǐng)求,獲取所需資源或執(zhí)行特定操作。
HTTP 服務(wù)器則是另一種應(yīng)用程序,通常是 Web 服務(wù)程序,如 Apache Web 服務(wù)器或 Microsoft Internet Information Services (IIS) 等。服務(wù)器負(fù)責(zé)接收客戶端的請(qǐng)求,并根據(jù)請(qǐng)求內(nèi)容生成并發(fā)送 HTTP 響應(yīng)數(shù)據(jù)。
HTTP 使用統(tǒng)一資源標(biāo)識(shí)符(Uniform Resource Identifiers, URI)來(lái)定位和訪問(wèn)資源。URI 提供了一種簡(jiǎn)單的方式來(lái)識(shí)別互聯(lián)網(wǎng)上的資源,并通過(guò)網(wǎng)絡(luò)傳輸數(shù)據(jù)和建立連接。
在建立連接之后,HTTP 數(shù)據(jù)消息會(huì)通過(guò)類似于 Internet 郵件所使用的格式(RFC5322)和多用途 Internet 郵件擴(kuò)展(MIME,RFC2045)進(jìn)行傳輸。這些格式和擴(kuò)展為數(shù)據(jù)傳輸提供了結(jié)構(gòu)化的信息描述和編碼方式,使得HTTP能夠處理各種類型的數(shù)據(jù),如文本、圖片、音頻、視頻等。
HTTP 消息結(jié)構(gòu)包括請(qǐng)求和響應(yīng)兩種類型。它們都有相似的結(jié)構(gòu),主要由三個(gè)部分組成:起始行、頭部和正文。下面將會(huì)分別進(jìn)行介紹。
在實(shí)際傳輸過(guò)程中,HTTP 消息通常會(huì)被壓縮或分塊傳輸,以提高傳輸效率。但其基本結(jié)構(gòu)保持不變。
5. 客戶端請(qǐng)求消息
- 請(qǐng)求行:包括請(qǐng)求方法(如 GET、POST 等)、請(qǐng)求的 URL(統(tǒng)一資源定位符)和 HTTP 版本。例如:
GET /index.html HTTP/1.1
。 - 請(qǐng)求頭部:包含一些描述請(qǐng)求的元數(shù)據(jù),例如客戶端類型(User-Agent)、支持的內(nèi)容類型(Accept)等。每個(gè)頭部字段包含一個(gè)字段名和字段值,用冒號(hào)(:)分隔。頭部字段之間用換行符分隔。
- 空行:用于分隔請(qǐng)求頭部和請(qǐng)求正文,由一個(gè)換行符表示。
- 請(qǐng)求正文(可選):包含要發(fā)送給服務(wù)器的數(shù)據(jù),例如 POST 請(qǐng)求中的表單數(shù)據(jù)。請(qǐng)求正文僅在某些請(qǐng)求方法(如 POST、PUT 等)中使用。
6. 服務(wù)器響應(yīng)消息
- 狀態(tài)行:包括 HTTP 版本、狀態(tài)碼(如 200 表示成功,404 表示未找到資源等)和狀態(tài)描述。例如:
HTTP/1.1 200 OK
。 - 響應(yīng)頭部:包含一些描述響應(yīng)的元數(shù)據(jù),例如內(nèi)容類型(Content-Type)、內(nèi)容長(zhǎng)度(Content-Length)等。頭部字段的結(jié)構(gòu)與請(qǐng)求頭部相同。
- 空行:用于分隔響應(yīng)頭部和響應(yīng)正文,由一個(gè)換行符表示。
- 響應(yīng)正文:包含要返回給客戶端的數(shù)據(jù),例如 HTML 文檔、圖片、視頻等。根據(jù)請(qǐng)求和服務(wù)器處理結(jié)果,響應(yīng)正文的內(nèi)容和長(zhǎng)度可能會(huì)有所不同。
7. GET傳遞數(shù)據(jù)實(shí)例
在這個(gè)示例中,我們將請(qǐng)求一個(gè)名為 “example.html” 的網(wǎng)頁(yè)。
客戶端請(qǐng)求內(nèi)容:
GET /example.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
服務(wù)器響應(yīng)內(nèi)容:
HTTP/1.1 200 OK
Date: Tue, 02 May 2023 10:30:00 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Last-Modified: Mon, 01 May 2023 12:00:00 GMT
ETag: "3a012-58e1f422b5c10"
Accept-Ranges: bytes
Content-Length: 1024
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip
Vary: Accept-Encoding
<!DOCTYPE html>
<html>
<head>
<title>Example Page</title>
</head>
<body>
<h1>Welcome to the Example Page!</h1>
<p>This is an example of a simple HTML page.</p>
</body>
</html>
輸出結(jié)果:
當(dāng)客戶端(如 Web 瀏覽器)接收到服務(wù)器的響應(yīng)后,它會(huì)將響應(yīng)內(nèi)容渲染為可視化頁(yè)面。在這個(gè)例子中,輸出結(jié)果將顯示一個(gè)簡(jiǎn)單的 HTML 頁(yè)面,包含一個(gè)標(biāo)題 “Welcome to the Example Page!” 和一段文本 “This is an example of a simple HTML page.”。
8. HTTP請(qǐng)求方法
根據(jù) HTTP 標(biāo)準(zhǔn),HTTP 請(qǐng)求可以使用多種請(qǐng)求方法。
HTTP1.0 定義了三種請(qǐng)求方法: GET, POST 和 HEAD 方法。
HTTP1.1 新增了六種請(qǐng)求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
序號(hào) | 方法 | 描述 |
---|---|---|
1 | GET | 用于請(qǐng)求指定的資源,不會(huì)對(duì)數(shù)據(jù)產(chǎn)生任何影響。只獲取資源的信息。 |
2 | POST | 用于提交數(shù)據(jù)到指定資源。可能會(huì)導(dǎo)致服務(wù)器狀態(tài)的變化或數(shù)據(jù)的改變。 |
3 | PUT | 用于更新指定資源的全部?jī)?nèi)容。如果資源不存在,則創(chuàng)建資源。 |
4 | PATCH | 用于對(duì)資源進(jìn)行部分更新。僅更新資源的部分內(nèi)容。 |
5 | DELETE | 用于刪除指定的資源。刪除資源后,資源將不再可訪問(wèn)。 |
6 | HEAD | 類似于 GET 請(qǐng)求,但只請(qǐng)求資源的頭部信息,不返回資源的主體內(nèi)容。 |
7 | OPTIONS | 用于描述指定資源的通信選項(xiàng)。返回服務(wù)器支持的 HTTP 請(qǐng)求方法。 |
8 | CONNECT | 用于建立網(wǎng)絡(luò)連接,通常用于 HTTPS 或代理服務(wù)器。 |
9 | TRACE | 請(qǐng)求服務(wù)器回顯收到的請(qǐng)求信息,主要用于調(diào)試。 |
9. HTTP響應(yīng)頭信息
HTTP 請(qǐng)求頭提供了關(guān)于請(qǐng)求,響應(yīng)或者其他的發(fā)送實(shí)體的信息。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-433680.html
在本章節(jié)中我們將具體來(lái)介紹 HTTP 響應(yīng)頭信息。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-433680.html
序號(hào) | 應(yīng)答頭 | 說(shuō)明 |
---|---|---|
1 | Accept-Ranges | 表明服務(wù)器是否支持請(qǐng)求的資源范圍。 |
2 | Age | 從源服務(wù)器到代理緩存形成的估算時(shí)間(以秒為單位)。 |
3 | Allow | 提供對(duì)給定資源可用的請(qǐng)求方法的列表。 |
4 | Cache-Control | 指定請(qǐng)求和響應(yīng)遵循的緩存機(jī)制。 |
5 | Connection | 控制網(wǎng)絡(luò)連接的選項(xiàng),如“keep-alive”保持連接或“close”關(guān)閉連接。 |
6 | Content-Encoding | 指定已應(yīng)用于響應(yīng)正文的編碼。 |
7 | Content-Language | 描述資源所使用的自然語(yǔ)言。 |
8 | Content-Length | 表示響應(yīng)正文的字節(jié)長(zhǎng)度。 |
9 | Content-Location | 指示資源可在哪里找到的替代位置。 |
10 | Content-Disposition | 指示響應(yīng)的附件的文件名和保存方式。 |
11 | Content-MD5 | 提供響應(yīng)體的MD5校驗(yàn)和,用于校驗(yàn)數(shù)據(jù)完整性。 |
12 | Content-Type | 描述響應(yīng)正文的媒體類型。 |
13 | Date | 響應(yīng)生成的日期和時(shí)間。 |
14 | ETag | 表示資源的特定版本的標(biāo)識(shí)符。 |
15 | Expires | 描述響應(yīng)中資源過(guò)期的日期和時(shí)間。 |
16 | Last-Modified | 指示資源的最后修改日期和時(shí)間。 |
17 | Link | 表示資源之間的關(guān)系。 |
18 | Location | 用于重定向用戶代理到新的資源位置。 |
19 | P3P | 表示網(wǎng)站的隱私策略。 |
20 | Pragma | 提供實(shí)現(xiàn)特定的指令,如禁用緩存。 |
21 | Proxy-Authenticate | 指示客戶端必須對(duì)代理進(jìn)行身份驗(yàn)證。 |
22 | Refresh | 定期刷新頁(yè)面的時(shí)間間隔。 |
23 | Retry-After | 指示客戶端應(yīng)等待多長(zhǎng)時(shí)間(秒)再次嘗試請(qǐng)求。 |
24 | Server | 描述響應(yīng)服務(wù)器的名稱和版本。 |
25 | Set-Cookie | 將一個(gè)或多個(gè)Cookie設(shè)置到客戶端。 |
26 | Strict-Transport-Security | 告知瀏覽器僅通過(guò)安全連接(如HTTPS)訪問(wèn)站點(diǎn)。 |
27 | Transfer-Encoding | 指定已應(yīng)用于消息正文的傳輸編碼。 |
28 | Vary | 告知代理服務(wù)器如何選擇合適的緩存響應(yīng)。 |
29 | Via | 指示請(qǐng)求經(jīng)過(guò)的代理服務(wù)器。 |
30 | Warning | 提供關(guān)于消息的可能問(wèn)題或附加信息。 |
31 | WWW-Authenticate | 指示客戶端必須進(jìn)行身份驗(yàn)證。 |
到了這里,關(guān)于【網(wǎng)絡(luò)進(jìn)階】HTTP服務(wù)器(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!