【TCP連接】與【HTTP請(qǐng)求】的相關(guān)面試問題詳解

【問題一】:現(xiàn)代瀏覽器在與服務(wù)器建立了一個(gè) TCP 連接后是否會(huì)在一個(gè) HTTP 請(qǐng)求完成后斷開?什么情況下會(huì)斷開?
Http1.0版本【我說它是低配版...會(huì)不會(huì)被罵...】

每次TCP連接只能發(fā)送一個(gè)請(qǐng)求,當(dāng)服務(wù)器響應(yīng)后就會(huì)關(guān)閉這次連接,下一個(gè)請(qǐng)求需要再次建立TCP連接,就是不支持keepalive。
(性能比較差:開始時(shí)發(fā)送速率較慢)

Http1.1版本【主流協(xié)議版本】

引入持久連接(persistent connection),即TCP連接默認(rèn)不關(guān)閉,可以被多個(gè)請(qǐng)求復(fù)用,不用聲明Connection: keep-alive。
明確要求服務(wù)器關(guān)閉TCP連接:

Connection: close

【補(bǔ)充】:目前,對(duì)于同一個(gè)域名,大多數(shù)瀏覽器允許同時(shí)建立6個(gè)持久連接。降低了延遲同時(shí)提高了帶寬的利用率。
Http1.1版本 加入了管道機(jī)制在同一個(gè)TCP連接里,允許多個(gè)請(qǐng)求同時(shí)發(fā)送,增加了并發(fā)性,進(jìn)一步改善了HTTP協(xié)議的效率

舉例來說,客戶端需要請(qǐng)求兩個(gè)資源。以前的做法是,在同一個(gè)TCP連接里面,先發(fā)送A請(qǐng)求,然后等待服務(wù)器做出回應(yīng),收到后再發(fā)出B請(qǐng)求。

管道機(jī)制 則是允許瀏覽器同時(shí)發(fā)出A請(qǐng)求和B請(qǐng)求,但是服務(wù)器還是按照順序,先回應(yīng)A請(qǐng)求,完成后再回應(yīng)B請(qǐng)求。

Http2.0版本

增加雙工模式,即不僅客戶端能夠同時(shí)發(fā)送多個(gè)請(qǐng)求,服務(wù)端也能同時(shí)處理多個(gè)請(qǐng)求,解決了隊(duì)頭堵塞的問題。


【問題二】:一個(gè) TCP 連接可以對(duì)應(yīng)幾個(gè) HTTP 請(qǐng)求?

既然是維持TCP連接,那么支持多個(gè)HTTP請(qǐng)求復(fù)用。


【問題三】:一個(gè) TCP 連接中 HTTP 請(qǐng)求發(fā)送可以一起發(fā)送么(比如一起發(fā)三個(gè)請(qǐng)求,再三個(gè)響應(yīng)一起接收)?

這一問在【問題一】中有詳細(xì)的解釋,http1.1版本 加入了管道機(jī)制,在同一個(gè)TCP連接里,允許多個(gè)請(qǐng)求同時(shí)發(fā)送(不需要等待任意請(qǐng)求的響應(yīng)),但是對(duì)請(qǐng)求的處理依然是按照請(qǐng)求收到的順序發(fā)送響應(yīng)。

A client that supports persistent connections MAY "pipeline" its requests (i.e., send multiple requests without waiting for each response). A server MUST send its responses to those requests in the same order that the requests were received.

但是在Http2.0版本中,增加雙工模式,即不僅客戶端能夠同時(shí)發(fā)送多個(gè)請(qǐng)求,服務(wù)端也能同時(shí)處理多個(gè)請(qǐng)求。


【問題四】:為什么有的時(shí)候刷新頁面不需要重新建立 SSL 連接?

【答】:TCP 連接有的時(shí)候會(huì)被瀏覽器和服務(wù)端維持一段時(shí)間。TCP 不需要重新建立,SSL 自然也不會(huì)斷開,所以不需要重新建立SSL 連接。

要了解這個(gè)問題中的SSL是什么?
【參考】:https://blog.csdn.net/wang_gongzi/article/details/82853060

SSL協(xié)議,用于Web瀏覽器與服務(wù)器之間的身份認(rèn)證和加密數(shù)據(jù)傳輸.它位于TCP/IP協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。

SSL協(xié)議可分為兩層:

  • SSL記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持。
  • SSL握手協(xié)議(SSL Handshake Protocol):它建立在SSL記錄協(xié)議之上,用于在實(shí)際的數(shù)據(jù)傳輸開始前,通訊雙方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等。

【問題五】:瀏覽器對(duì)同一 Host 建立 TCP 連接的數(shù)量有沒有限制?

【答】:有限制。目前,對(duì)于同一個(gè)域名,大多數(shù)瀏覽器允許同時(shí)建立6個(gè)持久連接。
【有限制的優(yōu)點(diǎn)】:降低了延遲同時(shí)提高了帶寬的利用率。

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

相關(guān)閱讀更多精彩內(nèi)容

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