本文章參考了很多文檔文獻(xiàn)整理成獅子自己喜歡的風(fēng)格類型文字,主要有:
《圖解網(wǎng)絡(luò)-小林coding》、Github上面的《前端語(yǔ)音社群》,ChatGpt 3.5
大家有興趣可以去找來(lái)看看,一起上岸!?。?/p>
面試官:什么是HTTP?
主要抓住三方面:超文本 傳輸 協(xié)議
HTTP 協(xié)議是?個(gè)雙向協(xié)議(兩點(diǎn)之間)
eg:
瀏覽器是請(qǐng)求? A ,百度?站就是應(yīng)答? B。雙?約定? HTTP 協(xié)議來(lái)通信,于是瀏覽器把請(qǐng)求數(shù)據(jù)發(fā)送給?站,?站再把?些數(shù)據(jù)返回給瀏覽器,最后由瀏覽器渲染在屏幕,就可以看到圖?、視頻了。
A——>B
A<——B 兩點(diǎn)之間可以有很多個(gè)過(guò)程,但是這個(gè)過(guò)程中也得遵循Http協(xié)議
答:超文本傳輸協(xié)議。是一個(gè)在網(wǎng)絡(luò)世界里面專門在兩點(diǎn)之間傳輸文字、圖片、視頻、音頻等超文本數(shù)據(jù)的約定和規(guī)范
面試官:說(shuō)說(shuō) HTTP1.0/1.1/2.0 的區(qū)別?
答:
Http協(xié)議是基于TCP/IP協(xié)議的形式,
Http/1.0: 采用的是短連接并且是串行請(qǐng)求,這樣客戶端每次發(fā)送一個(gè)請(qǐng)求就需要建立一次TCP連接(三次握手),并且串行請(qǐng)求會(huì)進(jìn)行很多無(wú)謂的TCP連接和斷開(kāi),這樣就造成了很大的通信負(fù)擔(dān)。
Http/1.1:為了改善上述問(wèn)題,Http/1.1采用了長(zhǎng)連接的通信方式,也叫持久連接,即TCP連接默認(rèn)不關(guān)閉,可以被多個(gè)請(qǐng)求復(fù)用,這樣就有效減少了TCP的重復(fù)連接與斷開(kāi)造成的額外負(fù)擔(dān)。
Http/2.0:相比于前兩個(gè)版本,Http/2.0性能上進(jìn)行了很大的提升。
首先,采用二進(jìn)制格式而非文本格式,解析起來(lái)更高效;
其次它采用完全多路復(fù)用,而非有序并阻塞的、只需一個(gè)連接即可實(shí)現(xiàn)并行;
還能進(jìn)行服務(wù)器推送,允許服務(wù)端推送資源給客戶端
面試官:說(shuō)說(shuō) HTTP 常見(jiàn)的請(qǐng)求頭有哪些? 作用?
HTTP頭字段(HTTP header fields),是指在超文本傳輸協(xié)議(HTTP)的請(qǐng)求和響應(yīng)消息中的消息頭部分它們定義了一個(gè)超文本傳輸協(xié)議事務(wù)中的操作參數(shù)。
字段名 | 說(shuō)明 | 示例 |
---|---|---|
Accept | 能夠接受的回應(yīng)內(nèi)容類型(Content-Types) | Accept: text/plain |
Accept-Charset | 能夠接受的字符集 | Accept-Charset: utf-8 |
Accept-Language | 能夠接受的回應(yīng)內(nèi)容的自然語(yǔ)言列表 | Accept-Language: en-US |
Cache-Control | 用來(lái)指定在這次的請(qǐng)求/響應(yīng)鏈中的所有緩存機(jī)制 都必須 遵守的指令 | Cache-Control: no-cache |
Connection | 該瀏覽器想要優(yōu)先使用的連接類型 | Connection: keep-alive Connection: Upgrade |
Cookie | 服務(wù)器通過(guò) Set- Cookie (下文詳述)發(fā)送的一個(gè) 超文本傳輸協(xié)議Cookie | Cookie: $Version=1; Skin=new; |
Content-Length | 以 八位字節(jié)數(shù)組 (8位的字節(jié))表示的請(qǐng)求體的長(zhǎng)度 | Content-Length: 348 |
Content-Type | 請(qǐng)求體的 多媒體類型 | Content-Type: application/x-www-form-urlencoded |
Host | 服務(wù)器的域名(用于虛擬主機(jī) ),以及服務(wù)器所監(jiān)聽(tīng)的傳輸控制協(xié)議端口號(hào) | Host: en.wikipedia.org:80 Host: en.wikipedia.org |
面試官:說(shuō)說(shuō)HTTP 常見(jiàn)的狀態(tài)碼有哪些,適用場(chǎng)景?
1xx
代表請(qǐng)求已被接受,需要繼續(xù)處理。這類響應(yīng)是臨時(shí)響應(yīng),只包含狀態(tài)行和某些可選的響應(yīng)頭信息,并以空行結(jié)束
常見(jiàn)的有:
- 100(客戶端繼續(xù)發(fā)送請(qǐng)求,這是臨時(shí)響應(yīng)):這個(gè)臨時(shí)響應(yīng)是用來(lái)通知客戶端它的部分請(qǐng)求已經(jīng)被服務(wù)器接收,且仍未被拒絕??蛻舳藨?yīng)當(dāng)繼續(xù)發(fā)送請(qǐng)求的剩余部分,或者如果請(qǐng)求已經(jīng)完成,忽略這個(gè)響應(yīng)。服務(wù)器必須在請(qǐng)求完成后向客戶端發(fā)送一個(gè)最終響應(yīng)
- 101:服務(wù)器根據(jù)客戶端的請(qǐng)求切換協(xié)議,主要用于websocket或http2升級(jí)
2xx
代表請(qǐng)求已成功被服務(wù)器接收、理解、并接受
常見(jiàn)的有:
- 200(成功):請(qǐng)求已成功,請(qǐng)求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回
- 201(已創(chuàng)建):請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源
- 202(已創(chuàng)建):服務(wù)器已經(jīng)接收請(qǐng)求,但尚未處理
- 203(非授權(quán)信息):服務(wù)器已成功處理請(qǐng)求,但返回的信息可能來(lái)自另一來(lái)源
- 204(無(wú)內(nèi)容):服務(wù)器成功處理請(qǐng)求,但沒(méi)有返回任何內(nèi)容
- 205(重置內(nèi)容):服務(wù)器成功處理請(qǐng)求,但沒(méi)有返回任何內(nèi)容
- 206(部分內(nèi)容):服務(wù)器成功處理了部分請(qǐng)求
3xx
表示要完成請(qǐng)求,需要進(jìn)一步操作。 通常,這些狀態(tài)代碼用來(lái)重定向
常見(jiàn)的有:
- 300(多種選擇):針對(duì)請(qǐng)求,服務(wù)器可執(zhí)行多種操作。 服務(wù)器可根據(jù)請(qǐng)求者 (user agent) 選擇一項(xiàng)操作,或提供操作列表供請(qǐng)求者選擇
- 301(永久移動(dòng)):請(qǐng)求的網(wǎng)頁(yè)已永久移動(dòng)到新位置。 服務(wù)器返回此響應(yīng)(對(duì) GET 或 HEAD 請(qǐng)求的響應(yīng))時(shí),會(huì)自動(dòng)將請(qǐng)求者轉(zhuǎn)到新位置
- 302(臨時(shí)移動(dòng)): 服務(wù)器目前從不同位置的網(wǎng)頁(yè)響應(yīng)請(qǐng)求,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來(lái)進(jìn)行以后的請(qǐng)求
- 303(查看其他位置):請(qǐng)求者應(yīng)當(dāng)對(duì)不同的位置使用單獨(dú)的 GET 請(qǐng)求來(lái)檢索響應(yīng)時(shí),服務(wù)器返回此代碼
- 305 (使用代理): 請(qǐng)求者只能使用代理訪問(wèn)請(qǐng)求的網(wǎng)頁(yè)。 如果服務(wù)器返回此響應(yīng),還表示請(qǐng)求者應(yīng)使用代理
- 307 (臨時(shí)重定向): 服務(wù)器目前從不同位置的網(wǎng)頁(yè)響應(yīng)請(qǐng)求,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來(lái)進(jìn)行以后的請(qǐng)求
4xx
代表了客戶端看起來(lái)可能發(fā)生了錯(cuò)誤,妨礙了服務(wù)器的處理
常見(jiàn)的有:
- 400(錯(cuò)誤請(qǐng)求): 服務(wù)器不理解請(qǐng)求的語(yǔ)法
- 401(未授權(quán)): 請(qǐng)求要求身份驗(yàn)證。 對(duì)于需要登錄的網(wǎng)頁(yè),服務(wù)器可能返回此響應(yīng)。
- 403(禁止): 服務(wù)器拒絕請(qǐng)求
- 404(未找到): 服務(wù)器找不到請(qǐng)求的網(wǎng)頁(yè)
- 405(方法禁用): 禁用請(qǐng)求中指定的方法
- 406(不接受): 無(wú)法使用請(qǐng)求的內(nèi)容特性響應(yīng)請(qǐng)求的網(wǎng)頁(yè)
- 407(需要代理授權(quán)): 此狀態(tài)代碼與 401(未授權(quán))類似,但指定請(qǐng)求者應(yīng)當(dāng)授權(quán)使用代理
- 408(請(qǐng)求超時(shí)): 服務(wù)器等候請(qǐng)求時(shí)發(fā)生超時(shí)
5xx
表示服務(wù)器無(wú)法完成明顯有效的請(qǐng)求。這類狀態(tài)碼代表了服務(wù)器在處理請(qǐng)求的過(guò)程中有錯(cuò)誤或者異常狀態(tài)發(fā)生
常見(jiàn)的有:
- 500(服務(wù)器內(nèi)部錯(cuò)誤):服務(wù)器遇到錯(cuò)誤,無(wú)法完成請(qǐng)求
- 501(尚未實(shí)施):服務(wù)器不具備完成請(qǐng)求的功能。 例如,服務(wù)器無(wú)法識(shí)別請(qǐng)求方法時(shí)可能會(huì)返回此代碼
- 502(錯(cuò)誤網(wǎng)關(guān)): 服務(wù)器作為網(wǎng)關(guān)或代理,從上游服務(wù)器收到無(wú)效響應(yīng)
- 503(服務(wù)不可用): 服務(wù)器目前無(wú)法使用(由于超載或停機(jī)維護(hù))
- 504(網(wǎng)關(guān)超時(shí)): 服務(wù)器作為網(wǎng)關(guān)或代理,但是沒(méi)有及時(shí)從上游服務(wù)器收到請(qǐng)求
- 505(HTTP 版本不受支持): 服務(wù)器不支持請(qǐng)求中所用的 HTTP 協(xié)議版本
面試官:HTTP 和 HTTPS 的區(qū)別?
Https協(xié)議 = Http協(xié)議 + SSL/TLS 安全協(xié)議
- 因?yàn)镠ttp協(xié)議傳輸?shù)?strong>超文本信息是明文傳輸,存在安全風(fēng)險(xiǎn)問(wèn)題;Https則解決了Http不安全的缺陷,在TCP和HTTP網(wǎng)絡(luò)層之間加入了SSL/TLS安全協(xié)議,使得報(bào)文能夠加密傳輸。
- 交互方式不同,HTTP 連接建?相對(duì)簡(jiǎn)單, TCP 三次握?之后便可進(jìn)? HTTP 的報(bào)?傳輸。? HTTPS 在 TCP 三次握?之后,還需進(jìn)? SSL/TLS 的握?過(guò)程,才可進(jìn)?加密報(bào)?傳輸。
- 端口號(hào)不同,Http默認(rèn)端口號(hào)為80,而Https默認(rèn)端口號(hào)為443。
- Https協(xié)議需要向CA申請(qǐng)數(shù)字證書,來(lái)保證服務(wù)器的身份是可信的。
面試官:HTTPS 解決了 HTTP 的哪些問(wèn)題?
-
竊聽(tīng)?險(xiǎn),Http協(xié)議僅支持明文傳輸,所有信息都暴露在大眾眼球,信息很容易被竊聽(tīng),?如通信鏈路上可以獲取通信內(nèi)容,?戶號(hào)容易沒(méi)。
-
篡改?險(xiǎn),?如強(qiáng)制植?垃圾?告,視覺(jué)污染
-
冒充?險(xiǎn),?如冒充淘寶?站,?戶錢容易沒(méi)。
對(duì)應(yīng)解決方案:
-
信息加密:交互信息?法被竊取。
-
校驗(yàn)機(jī)制:?法篡改通信內(nèi)容,篡改了就不能正常顯示。
-
身份證書:證明淘寶是真的淘寶?。
面試官:HTTPS 是如何建?連接的?其間交互了什么?
- 客戶端向服務(wù)端發(fā)送連接請(qǐng)求,包括支持的加密算法、協(xié)議版本等信息。
- 服務(wù)端回應(yīng)客戶端請(qǐng)求,確認(rèn)使用的加密算法、協(xié)議版本等信息。
- 服務(wù)端將自己的公鑰證書發(fā)送給客戶端,客戶端驗(yàn)證證書的合法性,并提取出服務(wù)端的公鑰。
- 客戶端生成隨機(jī)數(shù),使用服務(wù)端的公鑰對(duì)該隨機(jī)數(shù)進(jìn)行加密,然后將加密后的隨機(jī)數(shù)發(fā)送給服務(wù)端。
- 服務(wù)端使用自己的私鑰對(duì)加密后的隨機(jī)數(shù)進(jìn)行解密,得到客戶端隨機(jī)數(shù),然后生成一個(gè)新的隨機(jī)數(shù)作為會(huì)話密鑰。
- 客戶端和服務(wù)端分別使用會(huì)話密鑰加密和解密數(shù)據(jù),確保通信過(guò)程中數(shù)據(jù)的安全性和完整性。
面試官:說(shuō)?下 GET 和 POST 的區(qū)別?
Get
?法的含義是請(qǐng)求從服務(wù)器獲取資源,這個(gè)資源可以是靜態(tài)的?本、??、圖?視頻等
eg: 你打開(kāi)我的?章,瀏覽器就會(huì)發(fā)送 GET 請(qǐng)求給服務(wù)器,服務(wù)器就會(huì)返回?章的所有?字及資源。
POST
?法則是相反操作,它向 URI 指定的資源提交數(shù)據(jù),數(shù)據(jù)就放在報(bào)?的 body ?。
eg: 你在我?章底部,敲?了留?后點(diǎn)擊「提交」(暗示你們留?),瀏覽器就會(huì)執(zhí)??次 POST 請(qǐng)求,把你的留??字放進(jìn)了報(bào)? body ?,然后拼接好 POST 請(qǐng)求頭,通過(guò) TCP 協(xié)議發(fā)送給服務(wù)器。
tips:安全和冪等性的概念
在 HTTP 協(xié)議?,所謂的安全是指請(qǐng)求?法不會(huì)「破壞」服務(wù)器上的資源。
所謂的「冪等」,意思是多次執(zhí)?相同的操作,結(jié)果都是「相同」的。
那么很明顯 GET ?法就是安全且冪等的,因?yàn)樗恰钢蛔x」操作,?論操作多少次,服務(wù)器上的數(shù)據(jù)都是安全的,且每次的結(jié)果都是相同的。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-450213.html
POST 因?yàn)槭恰感略龌蛱峤粩?shù)據(jù)」的操作,會(huì)修改服務(wù)器上的資源,所以是不安全的,且多次提交數(shù)據(jù)就會(huì)創(chuàng)建多個(gè)資源,所以不是冪等的。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-450213.html
到了這里,關(guān)于【計(jì)算機(jī)網(wǎng)絡(luò)】| Http.*協(xié)議該知道的那些事兒 | 面經(jīng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!