2022-09-13

還不懂 HTTP 協(xié)議的嗎涩搓?一篇文章講透

寫在最前

超文本傳輸協(xié)議(Hyper Text Transfer Protocol污秆,HTTP)是一個(gè)簡(jiǎn)單的請(qǐng)求-響應(yīng)協(xié)議,它是基于 TCP 協(xié)議的應(yīng)用層傳輸協(xié)議昧甘。它指定了客戶端可能發(fā)送給服務(wù)器什么樣的消息以及得到什么樣的響應(yīng)良拼。

HTTP 是一種無(wú)狀態(tài) (stateless) 協(xié)議, HTTP 協(xié)議本身不會(huì)對(duì)發(fā)送過(guò)的請(qǐng)求和響應(yīng)的通信狀態(tài)進(jìn)行持久化處理。這樣做的目的是為了保持 HTTP 協(xié)議的簡(jiǎn)單性充边,從而能夠快速處理大量的事務(wù)庸推,提高效率。

HTTP 請(qǐng)求體

HTTP 請(qǐng)求體是請(qǐng)求數(shù)據(jù)時(shí)發(fā)送給服務(wù)器的數(shù)據(jù),畢竟向服務(wù)器拿數(shù)據(jù)予弧,先要表明怎么要刮吧,以及要什么!

HTTP 請(qǐng)求體由:請(qǐng)求行 掖蛤、請(qǐng)求頭、請(qǐng)求體組成井厌。

常用的 HTTP Method

l GET:用于請(qǐng)求訪問(wèn)已經(jīng)被 URI(統(tǒng)一資源標(biāo)識(shí)符)識(shí)別的資源蚓庭,可以通過(guò) URL 傳參給服務(wù)器。

l POST:用于傳輸信息給服務(wù)器仅仆,主要功能與 GET 方法類似器赞,但一般推薦使用 POST 方式。

l PUT:傳輸文件墓拜,報(bào)文主體中包含文件內(nèi)容港柜,保存到對(duì)應(yīng) URI 位置。

l HEAD:獲得報(bào)文首部咳榜,與 GET 方法類似夏醉,只是不返回報(bào)文主體,一般用于驗(yàn)證 URI 是否有效涌韩。

l DELETE:刪除文件畔柔,與 PUT 方法相反,刪除對(duì)應(yīng) URI 位置的文件臣樱。

l OPTIONS:查詢相應(yīng) URI 支持的 HTTP 方法靶擦。

Post 請(qǐng)求示例

# Method URL Version 請(qǐng)求行

POST /httpLearn/postRequest HTTP/1.1

# Request Header 請(qǐng)求頭

Host: 127.0.0.1:8080

User-Agent: apifox/1.0.0 (https://www.apifox.cn)

Content-Length: 126

Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

# Request Message 請(qǐng)求體

----WebKitFormBoundary7MA4YWxkTrZu0gW

Content-Disposition: form-data; name="param"

post

----WebKitFormBoundary7MA4YWxkTrZu0gW

Get 請(qǐng)求示例

Get 請(qǐng)求沒有請(qǐng)求體

# Method URL Version? 請(qǐng)求行

GET /httpLearn/getRequest?param=123 HTTP/1.1

# Request Header? 請(qǐng)求頭

Host: 127.0.0.1:8080

User-Agent: apifox/1.0.0 (https://www.apifox.cn)

GET 與 POST 的區(qū)別

GET 與 POST 是我們常用的兩種 HTTP Method,二者之間的區(qū)別主要包括如下五個(gè)方面:

  1. 從功能上講雇毫,GET 一般用來(lái)從服務(wù)器上獲取資源玄捕,POST 一般用來(lái)更新服務(wù)器上的資源
  2. 從 REST 服務(wù)角度上說(shuō),GET 是冪等的棚放,即讀取同一個(gè)資源枚粘,總是得到相同的數(shù)據(jù),而 POST 不是冪等的席吴,因?yàn)槊看握?qǐng)求對(duì)資源的改變并不是相同的赌结;
  3. 從請(qǐng)求參數(shù)形式上看,GET 請(qǐng)求的數(shù)據(jù)會(huì)附在 URL 之后孝冒,即將請(qǐng)求數(shù)據(jù)放置在 HTTP 報(bào)文的請(qǐng)求頭中柬姚,以?分割 URL 和傳輸數(shù)據(jù),參數(shù)之間以 & 相連庄涡;而 POST 請(qǐng)求會(huì)把提交的數(shù)據(jù)則放置在是 HTTP 請(qǐng)求報(bào)文的請(qǐng)求體中量承。
  4. 從安全性上看,POST 的安全性要比 GET 的安全性高,因?yàn)?GET 請(qǐng)求提交的數(shù)據(jù)將明文出現(xiàn)在 URL 上撕捍,而且 POST 請(qǐng)求參數(shù)則被包裝到請(qǐng)求體中拿穴,相對(duì)更安全。
  5. 從請(qǐng)求的大小看忧风,GET 請(qǐng)求的長(zhǎng)度受限于瀏覽器或服務(wù)器對(duì) URL 長(zhǎng)度的限制默色,允許發(fā)送的數(shù)據(jù)量比較小,而 POST 請(qǐng)求則是沒有大小限制的狮腿。

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

HTTP 的響應(yīng)報(bào)文是服務(wù)器返回的數(shù)據(jù)腿宰,必須先有請(qǐng)求體再有響應(yīng)報(bào)文。

HTTP 響應(yīng)報(bào)文由:狀態(tài)行缘厢、響應(yīng)頭吃度、響應(yīng)體組成。

常見 Response Code 分類

  1. 1xx(臨時(shí)響應(yīng)):信息贴硫,服務(wù)器收到請(qǐng)求椿每,需要請(qǐng)求者繼續(xù)執(zhí)行操作;
  2. 2xx(成功):操作被成功接收并處理英遭;
  3. 3xx(重定向):需要進(jìn)一步的操作以完成請(qǐng)求间护;
  4. 4xx(客戶端錯(cuò)誤):請(qǐng)求包含語(yǔ)法錯(cuò)誤或無(wú)法完成請(qǐng)求;
  5. 5xx(服務(wù)器錯(cuò)誤):服務(wù)器在處理請(qǐng)求的過(guò)程中發(fā)生了錯(cuò)誤贪绘;

響應(yīng)示例

# Version? Response Code? 狀態(tài)行

HTTP/1.1 200 OK

# Response Header? 響應(yīng)頭

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

Content-Length:31

Date:Wed, 19 Jan 2022 11:37:00 GMT

Keep-Alive:timeout=60

Connection:keep-alive

# Response Message? 響應(yīng)體

post request is ok,param = post

一次完整 HTTP 請(qǐng)求所經(jīng)歷的步驟

當(dāng)我們?cè)?web 瀏覽器的地址欄中輸入:www.baidu.com兑牡,然后回車,到底發(fā)生了什么税灌?

  1. 由域名→ IP 地址 尋找 IP 地址的過(guò)程依次經(jīng)過(guò)了瀏覽器緩存均函、系統(tǒng)緩存、hosts 文件菱涤、路由器緩存苞也、 遞歸搜索根域名服務(wù)器(DNS解析)。
  2. 建立 TCP/IP 連接(三次握手具體過(guò)程)粘秆。
  3. 由瀏覽器發(fā)送一個(gè) HTTP 請(qǐng)求如迟。
  4. 經(jīng)過(guò)路由器的轉(zhuǎn)發(fā),通過(guò)服務(wù)器的防火墻攻走,該 HTTP 請(qǐng)求到達(dá)了服務(wù)器殷勘。
  5. 服務(wù)器處理該 HTTP 請(qǐng)求,返回一個(gè) HTML 文件昔搂。
  6. 瀏覽器解析該 HTML 文件玲销,并且顯示在瀏覽器端。
  7. 服務(wù)器關(guān)閉 TCP 連接(四次揮手具體過(guò)程)摘符。

Https

HTTP 協(xié)議運(yùn)行在 TCP 之上贤斜,明文傳輸策吠,客戶端與服務(wù)器端都無(wú)法驗(yàn)證對(duì)方的身份。Https 是通過(guò) SSL(Secure Socket Layer, 安全套接層 )或 TLS(Transport Layer Security, 安全層傳輸協(xié)議)的組合使用瘩绒,加密 HTTP 的通信內(nèi)容猴抹。屬于通信加密,即在整個(gè)通信線路中加密锁荔。

HTTPS 采用共享密鑰加密(對(duì)稱)和公開密鑰加密(非對(duì)稱)兩者并用的混合加密機(jī)制蟀给。若密鑰能夠?qū)崿F(xiàn)安全交換,那么有可能會(huì)考慮僅使用公開密鑰加密來(lái)通信。但是公開密鑰加密與共享密鑰加密相比,其處理速度要慢阳堕。

HTTP 的不足

  1. 竊聽風(fēng)險(xiǎn):通信使用明文(不加密),內(nèi)容可能會(huì)被竊聽坤溃;
  2. 冒充風(fēng)險(xiǎn):不驗(yàn)證通信方的身份,因此有可能遭遇偽裝;
  3. 篡改風(fēng)險(xiǎn):無(wú)法證明報(bào)文的完整性,所以有可能已遭篡改嘱丢;

兩者區(qū)別

  1. 端口不同:Http 與 Http 使用不同的連接方式,用的端口也不一樣祠饺,前者是80越驻,后者是443;
  2. 資源消耗:和 Http 通信相比道偷,Https 通信會(huì)由于加減密處理消耗更多的 CPU 和內(nèi)存資源缀旁;
  3. 開銷:Https 通信需要證書,而證書一般需要向認(rèn)證機(jī)構(gòu)購(gòu)買勺鸦;
  4. 如果對(duì)部署證書有興趣可以看看:Docker通過(guò)Nginx并巍,ACME快速部署證書

HTTPS 工作原理

【1】客戶端發(fā)起 HTTPS 請(qǐng)求

用戶在瀏覽器里輸入一個(gè) https 網(wǎng)址,然后連接到 server 的 443 端口换途。

【2】服務(wù)端的配置

采用 HTTPS 協(xié)議的服務(wù)器必須要有一套數(shù)字證書懊渡,可以自己制作,也可以向組織申請(qǐng)军拟,區(qū)別就是自己頒發(fā)的證書需要客戶端驗(yàn)證通過(guò)剃执,才可以繼續(xù)訪問(wèn),而使用受信任的公司申請(qǐng)的證書則不會(huì)彈出提示頁(yè)面懈息。

這套證書其實(shí)就是一對(duì)公鑰和私鑰肾档,可以想象成一把鑰匙和一個(gè)鎖頭,只是全世界只有你一個(gè)人有這把鑰匙辫继,你可以把鎖頭給別人怒见,別人可以用這個(gè)鎖把重要的東西鎖起來(lái),然后發(fā)給你姑宽,因?yàn)橹挥心阋粋€(gè)人有這把鑰匙遣耍,所以只有你才能看到被這把鎖鎖起來(lái)的東西。

【3】傳送證書

這個(gè)證書其實(shí)就是公鑰低千,只是包含了很多信息配阵,如證書的頒發(fā)機(jī)構(gòu)馏颂,過(guò)期時(shí)間等等。

【4】客戶端解析證書

由客戶端的 TLS 來(lái)完成棋傍,首先會(huì)驗(yàn)證公鑰是否有效救拉,比如頒發(fā)機(jī)構(gòu),過(guò)期時(shí)間等等瘫拣。如果發(fā)現(xiàn)異常亿絮,則會(huì)彈出一個(gè)警告框,提示證書存在問(wèn)題麸拄。

如果證書沒有問(wèn)題派昧,那么就生成一個(gè)隨機(jī)值,然后用證書對(duì)該隨機(jī)值進(jìn)行加密拢切,就好像上面說(shuō)的蒂萎,把隨機(jī)值用鎖頭鎖起來(lái),這樣除非有鑰匙淮椰,不然看不到被鎖住的內(nèi)容五慈。

【5】傳送加密信息

用證書加密后的隨機(jī)值,目的就是讓服務(wù)端得到這個(gè)隨機(jī)值主穗,以后客戶端和服務(wù)端的通信就可以通過(guò)這個(gè)隨機(jī)值來(lái)進(jìn)行加密解密了泻拦。

【6】服務(wù)端解密信息

服務(wù)端用私鑰解密后,得到了客戶端傳過(guò)來(lái)的隨機(jī)值(私鑰)忽媒,然后把內(nèi)容通過(guò)該值進(jìn)行對(duì)稱加密争拐,所謂對(duì)稱加密就是,將信息和私鑰通過(guò)某種算法混合在一起晦雨,這樣除非知道私鑰架曹,不然無(wú)法獲取內(nèi)容,而正好客戶端和服務(wù)端都知道這個(gè)私鑰金赦,所以只要加密算法夠厲害音瓷,私鑰夠復(fù)雜,數(shù)據(jù)就夠安全夹抗。

【7】傳輸加密后的信息

服務(wù)段用私鑰加密后的信息绳慎,可以在客戶端被還原。

【8】客戶端解密信息

客戶端用之前生成的私鑰解密服務(wù)段傳過(guò)來(lái)的信息漠烧,于是獲取了解密后的內(nèi)容杏愤,整個(gè)過(guò)程第三方即使監(jiān)聽到了數(shù)據(jù),也無(wú)法解密信息已脓。

HTTPS 的缺點(diǎn)

  1. HTTPS 協(xié)議多次握手珊楼,導(dǎo)致頁(yè)面的加載時(shí)間延長(zhǎng)近 50%;
  2. HTTPS 連接緩存不如 HTTP 高效度液,會(huì)增加數(shù)據(jù)開銷和功耗厕宗;
  3. SSL 涉及到的安全算法會(huì)消耗 CPU 資源画舌,對(duì)服務(wù)器資源消耗較大;

————————————————

版權(quán)聲明:本文為CSDN博主「九七年生于初夏」的原創(chuàng)文章已慢,遵循CC 4.0 BY-SA版權(quán)協(xié)議曲聂,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/csp732171109/article/details/122608300

作者:易道云控

鏈接:http://www.reibang.com/p/6153bf335d4b

來(lái)源:簡(jiǎn)書

著作權(quán)歸作者所有佑惠。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)朋腋,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末膜楷,一起剝皮案震驚了整個(gè)濱河市旭咽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赌厅,老刑警劉巖穷绵,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異特愿,居然都是意外死亡请垛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門洽议,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人漫拭,你說(shuō)我怎么就攤上這事亚兄。” “怎么了采驻?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵审胚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我礼旅,道長(zhǎng)膳叨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任痘系,我火速辦了婚禮菲嘴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘汰翠。我一直安慰自己龄坪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布复唤。 她就那樣靜靜地躺著健田,像睡著了一般。 火紅的嫁衣襯著肌膚如雪佛纫。 梳的紋絲不亂的頭發(fā)上妓局,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天总放,我揣著相機(jī)與錄音,去河邊找鬼好爬。 笑死局雄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的抵拘。 我是一名探鬼主播哎榴,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼僵蛛!你這毒婦竟也來(lái)了尚蝌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤充尉,失蹤者是張志新(化名)和其女友劉穎飘言,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驼侠,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姿鸿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倒源。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苛预。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖笋熬,靈堂內(nèi)的尸體忽然破棺而出热某,到底是詐尸還是另有隱情,我是刑警寧澤胳螟,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布昔馋,位于F島的核電站,受9級(jí)特大地震影響糖耸,放射性物質(zhì)發(fā)生泄漏秘遏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一嘉竟、第九天 我趴在偏房一處隱蔽的房頂上張望邦危。 院中可真熱鬧,春花似錦舍扰、人聲如沸铡俐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)审丘。三九已至,卻和暖如春勾给,著一層夾襖步出監(jiān)牢的瞬間滩报,已是汗流浹背锅知。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脓钾,地道東北人售睹。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像可训,于是被迫代替她去往敵國(guó)和親昌妹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 運(yùn)維工程師學(xué)習(xí)路線 運(yùn)維工程師在前期是一個(gè)很苦逼的工作握截,在這期間可能干著修電腦飞崖、掐網(wǎng)線、搬機(jī)器的活谨胞,顯得沒地位固歪!時(shí)...
    pilot1123閱讀 111評(píng)論 0 0
  • 運(yùn)維工程師學(xué)習(xí)路線 運(yùn)維工程師在前期是一個(gè)很苦逼的工作,在這期間可能干著修電腦胯努、掐網(wǎng)線牢裳、搬機(jī)器的活,顯得沒地位叶沛!時(shí)...
    pilot2閱讀 59評(píng)論 0 0
  • 寫在最前 超文本傳輸協(xié)議(Hyper Text Transfer Protocol灰署,HTTP)是一個(gè)簡(jiǎn)單的請(qǐng)...
    益達(dá)_glmsb閱讀 282評(píng)論 0 1
  • 實(shí)現(xiàn)一個(gè)扇形 用CSS實(shí)現(xiàn)扇形的思路和三角形基本一致伶椿,就是多了一個(gè)圓角的樣式,實(shí)現(xiàn)一個(gè)90°的扇形: 數(shù)組有哪些原...
    helloworld1024閱讀 241評(píng)論 0 0
  • 網(wǎng)絡(luò)面試集 一氓侧、TCP/UDP 1、UDP與TCP的區(qū)別 TCP(TransmissionControl ...
    Zhs_Android閱讀 106評(píng)論 0 1