Next.js+React+Node系统实战

209 阅读4分钟

Next.js+React+Node系统实战

HTTP協議 - 連载中

此文主要解說HTTP的相關學問。

HTTP全稱爲超文本傳輸協議(Hypertext Transfer Protocol),是處在應用層的協議。

URI和資源

爲了標識網络上的資源,呈現了URI。

URI全稱爲統一資源標識(Uniform Resource Identifier),是用來標識網络資源的一種標準。

URI由很多局部組成:協議、主機、端口、途径、查询等。

其中URL(Uniform Resource Locator,統一資源定位符)與URI简直相同,在http中最爲常用,如我們阅讀器地址欄的地址​​bugkit.cn​​。

以HTTP爲例:

​​http://​​是協議,相似的還有​​ftp​​,​​ssh​​等等。

​​ww.example.com​​爲主機

​​80​​爲端口

​​/path/to/myfile.html​​ 爲途径

​​?key1=value1&key2=value2​​爲查询條件

​​#SomewhereInTheDocument​​ 爲文件章節,英文稱谓​​fragment​​

www.example.com:80/path/to/myf…

?key1=value1&key2=value2#SomewhereInTheDocumentHTTP音訊格式

HTTP是基於懇求-響應形式下的一種應對協議,對應標準也分爲兩種,分別是Request和Response。

Request

Request中文意義即爲懇求。懇求分爲懇求行、懇求頭、空行和懇求踢四個局部。

一個典型的懇求報文如下:

POST /api/v2/za/logs/batch HTTP/1.1

Host: zhihu-web-analytics.zhihu.com

Connection: keep-alive

Content-Length: 457

X-ZA-ClientID: cfb262c0-19e2-4c90-b9f0-901f2801e45c

Content-Encoding: gzip

Content-Type: application/json; charset=UTF-8

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)

{

"username":"username"

}懇求行

上述内容的第一行爲懇求行,包含懇求辦法(POST)、懇求途径(/api/v2/za/logs/batch)、HTTP版本(HTTP/1.1)。

懇求辦法除了POST懇求,還包含GET、DELETE、PUT、OPTION等懇求辦法。

懇求頭

第二行到第八行是懇求頭,懇求頭是可選的,主要用來描绘懇求的相關格式或者請求。

懇求頭每行以​​key: value​​的方式停止描绘。

如Host是懇求的主機域名,Content-Length向效勞器指明懇求體的内容長度,User-Agent標明懇求的客戶端爲Mozilla/5.0。

懇求頭對大小寫不敏感。

空行

空行沒有特殊的含義,主要作用是用來分割懇求頭和懇求體。

懇求體

空行以下的内容爲懇求體。懇求體是可選的,如GET懇求就沒有懇求體,其查询參數是放在懇求行的懇求途径下的。

GET /test.html?query=alibaba HTTP/1.1懇求體主要是爲了處置長懇求内容而呈現的,比方上傳文件、提交表單信息。

Response

Response中文意義爲響應,即對懇求作出的答復。和Request相比,響應同樣分爲相應行、響應頭、空行和響應體四局部。

如下是一段典型的響應。

HTTP/1.1 200 OK

Date: Wed, 23 Mar 2022 12:00:09 GMT

Content-Type: text/html; charset=UTF-8

Content-Length: 0

Connection: keep-alive

Server: openresty

Access-Control-Allow-Origin: *

X-Backend-Response: 0.003

Hello World

響應行

第一行爲響應行,包含三局部:HTTP版本(HTTP/1.1)、狀態码(200)和狀態文本(OK)。

響應頭

響應頭的格式和懇求頭的格式根本一樣的,這里不再赘述。

空行

作分割響應頭和響應體用。

響應體

返回客戶端的相應數據,如上就是返回客戶端一段html代码。假如客戶端是阅讀器,阅讀器就會依據相應頭的content-type和響應體將響應體渲染到阅讀器中。

HTTP衔接管理

什麼是HTTP衔接?

HTTP衔接指的是在應用層下層的TCP衔接或者UDP,通常是TCP。TCP爲HTTP協議提供了數據傳輸的功用,使得我們的數據能夠完好無誤的抵達目的程序(如阅讀器)。

HTTP衔接管理通常指的是TCP的衔接管理。HTTP要傳輸數據,首先需求樹立TCP衔接,而TCP衔接需求經過三次握手,握手勝利後才會開端真正的HTTP的數據傳輸。數據傳輸完畢後我們需求依據狀況能否斷掉傳輸完成的TCP衔接。

這樣的整個過程稱爲HTTP衔接管理。

HTTP1.0時,默許是短链接。意義是說每次發送Request的時分,需求經過TCP三次握手樹立衔接,然乎傳輸數據,最後四次揮手斷掉衔接。

與短衔接對應的肯定有長衔接,指的是數據傳輸完成後不會馬上斷掉TCP衔接。

如何設置爲長链接?

假如還記得之前提過的懇求頭的話,能夠很明顯地晓得經過懇求頭控製啦。

Connection: keep-alive如上懇求頭就通知效勞器要堅持長链接了。

HTTP1.1默許是長链接。

能夠經過如下命令關閉長链接。

Connection: close長链接VS短链接

長链接適用於懇求密集,堅持長链接有利於減少TCP握手和揮手的時間,從而提供高性能。

短链接適用於資源閑置的狀況,這樣TCP衔接閑暇時能夠保證效勞器不會保證負载過高。

download链接:pan.baidu.com/s/1OgO8pka0… 提取码:h97u --来自百度网盘超级会员V4的分享