【HTTP】HTTP基本知識

寫在前面的話,這篇文章是作者參考網(wǎng)上的帖子的一個整理,參考資料較多,作為Http的入門文章,以供學(xué)習(xí)使用~

原文鏈接:灰子學(xué)技術(shù) http基礎(chǔ)知識

一、Http是什么?

HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫,是用于從萬維網(wǎng)(WWW:World Wide Web )服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。

HTTP是一個基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)(HTML 文件, 圖片文件, 查詢結(jié)果等)。

HTTP是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。

HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務(wù)端即WEB服務(wù)器發(fā)送所有請求。Web服務(wù)器根據(jù)接收到的請求后,向客戶端發(fā)送響應(yīng)信息。

二、Http的主要特點:

1、簡單快速:客戶向服務(wù)器請求服務(wù)時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST、PUT、PATCH、DELETE。每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同。由于HTTP協(xié)議簡單,使得HTTP服務(wù)器的程序規(guī)模小,因而通信速度很快。

2、靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對象。正在傳輸?shù)念愋陀蒀ontent-Type加以標(biāo)記。

3、無連接:無連接的含義是限制每次連接只處理一個請求。服務(wù)器處理完客戶的請求,并收到客戶的應(yīng)答后,即斷開連接。采用這種方式可以節(jié)省傳輸時間。Http1.1支持長連接,不過還是處于REQ發(fā)出后,等到收到了RESP才會繼續(xù)發(fā)送下一個REQ。Http2.0之后,做了改變,實現(xiàn)了真正意義上的長連接,實現(xiàn)了真正意義上的多路復(fù)用,同時還支持2進制作為body的方式。

4、無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時它的應(yīng)答就較快。Http的這種無狀態(tài)可以通過cookie緩存等方式來解決。

三、URL介紹:

HTTP使用統(tǒng)一資源標(biāo)識符(Uniform Resource Identifiers, URI)來傳輸數(shù)據(jù)和建立連接。URL是一種特殊類型的URI,包含了用于查找某個資源的足夠的信息

URL,全稱是UniformResourceLocator, 中文叫統(tǒng)一資源定位符,是互聯(lián)網(wǎng)上用來標(biāo)識某一處資源的地址。以下面這個URL為例,介紹下普通URL的各部分組成:

http://www.baidu.com:8080/path/index.asp?boardID=5&ID=24618&page=1#name

從上面的URL可以看出,一個完整的URL包括以下幾部分:

1.協(xié)議部分:該URL的協(xié)議部分為“http:”,這代表網(wǎng)頁使用的是HTTP協(xié)議??梢允褂枚喾N協(xié)議,如HTTP,HTTPS, FTP等等。本例中使用的是HTTP協(xié)議,在"HTTP"后面的“//”為分隔符。

2.域名部分:該URL的域名部分為“www.baidu.com”。一個URL中,也可以使用IP地址作為域名使用,例如127.0.0.1:8080。

3.端口部分:跟在域名后面的是端口,域名和端口之間使用“:”作為分隔符。端口不是一個URL必須的部分,如果省略端口部分,將采用默認(rèn)端口,http端口默認(rèn)為8080,https默認(rèn)為443。

4.虛擬目錄部分:從域名后的第一個“/”開始到最后一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/path/”。

5.文件名部分:從域名后的最后一個“/”開始到“?”為止,是文件名部分,如果沒有“?”,則是從域名后的最后一個“/”開始到“#”為止,是文件部分,如果沒有“?”和“#”,那么從域名后的最后一個“/”開始到結(jié)束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一個URL必須的部分,如果省略該部分,則使用默認(rèn)的文件名

6.錨部分:從“#”開始到最后,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分

7.參數(shù)部分:從“?”開始到“#”為止之間的部分為參數(shù)部分,又稱搜索部分、查詢部分。本例中的參數(shù)部分為“boardID=5&ID=24618&page=1”。參數(shù)可以允許有多個參數(shù),參數(shù)與參數(shù)之間用“&”作為分隔符。

四、常見狀態(tài)碼:

狀態(tài)代碼有三位數(shù)字組成,第一個數(shù)字定義了響應(yīng)的類別,共分五種類別:

1xx:指示信息--表示請求已接收,繼續(xù)處理

2xx:成功--表示請求已被成功接收、理解、接受

3xx:重定向--要完成請求必須進行更進一步的操作

4xx:客戶端錯誤--請求有語法錯誤或請求無法實現(xiàn)

5xx:服務(wù)器端錯誤--服務(wù)器未能實現(xiàn)合法的請求

常見狀態(tài)碼:

200 OK? ? ? ? ? ? ? ? ? ? ? ? //客戶端請求成功

400 Bad Request? ? ? ? ? ? ? //客戶端請求有語法錯誤,不能被服務(wù)器所理解

401 Unauthorized? ? ? ? ? ? ? //請求未經(jīng)授權(quán),這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用

403 Forbidden? ? ? ? ? ? ? ? //服務(wù)器收到請求,但是拒絕提供服務(wù)

404 Not Found? ? ? ? ? ? ? ? //請求資源不存在,eg:輸入了錯誤的URL

500 Internal Server Error? ? //服務(wù)器發(fā)生不可預(yù)期的錯誤

503 Server Unavailable? ? ? ? //服務(wù)器當(dāng)前不能處理客戶端的請求,一段時間后可能恢復(fù)正常

五、Http請求方法:

根據(jù)HTTP標(biāo)準(zhǔn),HTTP請求可以使用多種請求方法。

HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

GET? 請求指定的頁面信息,并返回實體主體。

HEAD? ? 類似于get請求,只不過返回的響應(yīng)中沒有具體的內(nèi)容,用于獲取報頭,一般用于獲取資源的元信息,比如長度,修改時間等。

POST? 一般用于創(chuàng)建或者修改資源,在RESTFUL規(guī)范里面POST只用來創(chuàng)建資源,并返回201 Created狀態(tài)碼表示創(chuàng)建成功。不過大多數(shù)網(wǎng)站都不遵循嚴(yán)格的RESTFUL規(guī)范,POST拿來做修改資源的事也是非常常見的。

PUT 對應(yīng)于POST表示創(chuàng)建資源,PUT用于修改資源,PUT的參數(shù)必須是對象的全部屬性,修改是覆蓋式全部修改。

PATCH 對應(yīng)于PUT的參數(shù)是對象的全部屬性,PATCH的參數(shù)是部分屬性,修改是局部字段修改。

DELETE? 請求服務(wù)器刪除指定的頁面。

CONNECT? HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。

OPTIONS? 允許客戶端查看服務(wù)器的性能。

TRACE? ? 回顯服務(wù)器收到的請求,主要用于測試或診斷。

六、HTTP工作原理

HTTP協(xié)議定義Web客戶端如何從Web服務(wù)器請求Web頁面,以及服務(wù)器如何把Web頁面?zhèn)魉徒o客戶端。HTTP協(xié)議采用了請求/響應(yīng)模型。客戶端向服務(wù)器發(fā)送一個請求報文,請求報文包含請求的方法、URL、協(xié)議版本、請求頭部和請求數(shù)據(jù)。服務(wù)器以一個狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括協(xié)議的版本、成功或者錯誤代碼、服務(wù)器信息、響應(yīng)頭部和響應(yīng)數(shù)據(jù)。

以下是 HTTP 請求/響應(yīng)的步驟:

###### 1、客戶端連接到Web服務(wù)器

一個HTTP客戶端,通常是瀏覽器,與Web服務(wù)器的HTTP端口(默認(rèn)為80)建立一個TCP套接字連接。例如,[http://www.oakcms.cn](https://link.jianshu.com?t=http://www.oakcms.cn)。

###### 2、發(fā)送HTTP請求

通過TCP套接字,客戶端向Web服務(wù)器發(fā)送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數(shù)據(jù)4部分組成。

###### 3、服務(wù)器接受請求并返回HTTP響應(yīng)

Web服務(wù)器解析請求,定位請求資源。服務(wù)器將資源復(fù)本寫到TCP套接字,由客戶端讀取。一個響應(yīng)由狀態(tài)行、響應(yīng)頭部、空行和響應(yīng)數(shù)據(jù)4部分組成。

###### 4、釋放連接[TCP連接](http://www.itdecent.cn/p/ef892323e68f)

若connection 模式為close,則服務(wù)器主動關(guān)閉[TCP連接](http://www.itdecent.cn/p/ef892323e68f),客戶端被動關(guān)閉連接,釋放[TCP連接](http://www.itdecent.cn/p/ef892323e68f);若connection 模式為keepalive,則該連接會保持一段時間,在該時間內(nèi)可以繼續(xù)接收請求;

###### 5、客戶端瀏覽器解析HTML內(nèi)容

客戶端瀏覽器首先解析狀態(tài)行,查看表明請求是否成功的狀態(tài)代碼。然后解析每一個響應(yīng)頭,響應(yīng)頭告知以下為若干字節(jié)的HTML文檔和文檔的字符集??蛻舳藶g覽器讀取響應(yīng)數(shù)據(jù)HTML,根據(jù)HTML的語法對其進行格式化,并在瀏覽器窗口中顯示。

例如:在瀏覽器地址欄鍵入URL,按下回車之后會經(jīng)歷以下流程:

1、瀏覽器向 DNS 服務(wù)器請求解析該 URL 中的域名所對應(yīng)的 IP 地址;

2、解析出 IP 地址后,根據(jù)該 IP 地址和默認(rèn)端口 80,和服務(wù)器建立[TCP連接](http://www.itdecent.cn/p/ef892323e68f);

3、瀏覽器發(fā)出讀取文件(URL 中域名后面部分對應(yīng)的文件)的HTTP 請求,該請求報文作為 [TCP 三次握手](http://www.itdecent.cn/p/ef892323e68f)的第三個報文的數(shù)據(jù)發(fā)送給服務(wù)器;

4、服務(wù)器對瀏覽器請求作出響應(yīng),并把對應(yīng)的 html 文本發(fā)送給瀏覽器;

5、釋放 [TCP連接](http://www.itdecent.cn/p/ef892323e68f);

6、瀏覽器將該 html 文本并顯示內(nèi)容;

[http://www.itdecent.cn/p/80e25cb1d81a](http://www.itdecent.cn/p/80e25cb1d81a)

[https://www.ruanyifeng.com/blog/2019/09/curl-reference.html](https://www.ruanyifeng.com/blog/2019/09/curl-reference.html)

[https://juejin.im/post/5ab341e06fb9a028c6759ce0](https://juejin.im/post/5ab341e06fb9a028c6759ce0)

[https://juejin.im/post/5ab341e06fb9a028c6759ce0](https://juejin.im/post/5ab341e06fb9a028c6759ce0)


微信公眾號:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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