本期是【大廠面試】系列文章的第3期,模擬HTTP面試內容。
面試開始
面試官:看你簡歷上寫了熟悉HTTP,什麼是HTTP?
獨白:嘿嘿,就是想引導你來問這個的
大彬:嗯,HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於從全球資訊網伺服器傳輸超文字到本地瀏覽器的傳送協議。協議實際上就是雙方約定好的格式,確保雙方都能理解這種格式。
面試官:那HTTP協議有什麼特點呢?
大彬:1. HTTP允許傳輸任意型別的資料。傳輸的型別由Content-Type加以標記。
大彬:2. 無狀態。對於客戶端每次傳送的請求,伺服器都認為是一個新的請求,上一次會話和下一次會話之間沒有聯絡。
大彬:3.支援客戶端/伺服器模式。
面試官:知道HTTP長連線嗎?
獨白:經典面試題!
大彬:HTTP長連線,指的是複用TCP連線。多個HTTP請求可以複用同一個TCP連線,這就節省了TCP連線建立和斷開的消耗。
大彬:HTTP1.0預設使用的是短連線。瀏覽器和伺服器每進行一次HTTP操作,就建立一次連線,任務結束就中斷連線。
大彬:HTTP1.1起,預設使用長連線。要使用長連線,客戶端和伺服器的HTTP首部的Connection都要設定為keep-alive,才能支援長連線。
面試官:嗯,剛剛有提到HTTP1.0和HTTP1.1,那你知道HTTP1.1和 HTTP2.0的區別嗎?
大彬:HTTP2.0相比HTTP1.1支援的特性如下:
- 新的二進位制格式:HTTP1.1 基於文字格式傳輸資料;HTTP2.0採用二進位制格式傳輸資料,解析更高效。
- 多路複用:在一個連線裡,允許同時傳送多個請求或響應,並且這些請求或響應能夠並行的傳輸而不被阻塞。
- 頭部壓縮,HTTP1.1的header帶有大量資訊,而且每次都要重複傳送;HTTP2.0 把header從資料中分離,並封裝成頭幀和資料幀,使用特定演算法壓縮頭幀,有效減少頭資訊大小。並且HTTP2.0在客戶端和伺服器端記錄了之前傳送的鍵值對,對於相同的資料,不會重複傳送。比如請求a傳送了所有的頭資訊欄位,請求b則只需要傳送差異資料,這樣可以減少冗餘資料,降低開銷。
- 服務端推送:HTTP2.0允許伺服器向客戶端推送資源,無需客戶端傳送請求到伺服器獲取。
面試官:不錯不錯!再問一個,你覺得HTTP通訊安全嗎?
獨白:裸奔能安全嗎...
大彬:HTTP是明文傳輸,容易被黑客竊聽或篡改,不安全。
大彬:可以使用 HTTPS 來解決 HTTP 明文協議的缺陷,在 HTTP 的基礎上加入 SSL/TLS 協議,依靠 SSL 證書來驗證伺服器的身份,為客戶端和伺服器端之間建立SSL通道,確保資料傳輸安全。
面試官:哦?講一下HTTPS的原理?可以詳細點
獨白:果然逃不掉這個問題...
大彬:首先是TCP三次握手,然後客戶端發起一個HTTPS連線建立請求,客戶端先發一個Client Hello
的包,然後服務端響應Server Hello
,接著再給客戶端傳送它的證書,然後雙方經過金鑰交換,最後使用交換的金鑰加解密資料。
大彬:具體過程如下:
大彬:首先是協商加密演算法 。在Client Hello
裡面客戶端會告知服務端自己當前的一些資訊,包括客戶端要使用的TLS版本,支援的加密演算法,要訪問的域名,給服務端生成的一個隨機數(Nonce)等。需要提前告知伺服器想要訪問的域名以便伺服器傳送相應的域名的證書過來。
大彬:服務端響應Server Hello
,告訴客戶端服務端選中的加密演算法。
大彬:接著服務端給客戶端發來了證書。
大彬:客戶端使用證書的認證機構CA公開發布的RSA公鑰對該證書進行驗證。
大彬:驗證通過之後,瀏覽器和伺服器通過金鑰交換演算法產生共享的對稱金鑰。
大彬:開始傳輸資料,使用同一個對稱金鑰來加解密。
面試官:理解的還算到位,不錯!今天面試就到這,有訊息會通知你。
大彬:好的,謝謝你
獨白:還好,背的八股文都用上了~