前言
了解HTTP與HTTPS之前可以先簡單了解下網(wǎng)絡協(xié)議分層俐镐,以及每層的具體的工作分工與協(xié)議,可參考阮一峰老師的文章互聯(lián)網(wǎng)協(xié)議入門(一)法绵、互聯(lián)網(wǎng)協(xié)議入門(二)
TCP和HTTP請求之間有什么關系?
TPC/IP協(xié)議
是傳輸層協(xié)議酪碘,主要解決數(shù)據(jù)如何在網(wǎng)絡中傳輸
HTTP
是應用層協(xié)議朋譬,主要解決如何包裝數(shù)據(jù)。
WEB使用HTTP協(xié)議作應用層協(xié)議兴垦,以封裝HTTP 文本信息徙赢,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)到網(wǎng)絡上。(在http請求之前需要建立tcp鏈接探越。)
1. 在完成一個HTTP請求后犀忱,TCP鏈接會否立即斷開?
- HTTP/1.0的時候是會的扶关,需要手動設置
Connection: keep-alive
阴汇。 - HTTP/1.1的時候Connection默認為
keep-alive
。
一般情況下节槐,復用的 TCP連接在等待設置的超時時間之后還沒有被任何連接使用的話搀庶,就會主動斷開。
2. 一個TCP鏈接可以對應多少個HTTP請求铜异?
一個TCP鏈接可以對應多個HTTP請求哥倔,只要這個TCP鏈接沒有斷開,就可以發(fā)送HTTP請求揍庄。
3. 這些HTTP請求可以同時發(fā)送咆蒿,同時響應么,在一個TCP鏈接中?比如:三個HTTP請求同時發(fā)送沃测,同時接收響應缭黔。
- 在HTTP/1.1中,單個TCP鏈接在同一時刻只能處理一個請求蒂破,意思就是:任意兩個 HTTP 請求從開始到結束的時間在同一個 TCP鏈接里不能重疊馏谨。
- HTTP/2.0 提供了Multiplexing 多路傳輸(多路復用)「矫裕可以在一個TCP鏈接中同時發(fā)起多個HTTP請求惧互,同時響應多個HTTP請求。
4. 瀏覽器http請求的并發(fā)性是如何體現(xiàn)的喇伯?并發(fā)請求的數(shù)量有沒有限制喊儡?
瀏覽器會同時與服務器建立多個TCP鏈接,來支持多個HTTP同時請求的稻据。
就例如:Chrome瀏覽器最多允許對同一個域名Host建立6個TCP連接艾猜,不同的瀏覽器有所區(qū)別。
HTTP
HTTP(HyperText Transfer Protocol)
超文本傳輸協(xié)議是互聯(lián)網(wǎng)上應用最為廣泛的一種網(wǎng)絡協(xié)議攀甚。
HTTP的工作原理
HTTP是一個基于TCP/IP通信協(xié)議來傳遞數(shù)據(jù)的協(xié)議,傳輸?shù)臄?shù)據(jù)類型為HTML 文件岗喉、圖片文件, 查詢結果等秋度。
HTTP協(xié)議一般用于B/S架構()。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB服務器發(fā)送所有請求钱床。
我們以訪問百度為例:
關于HTTP的三次握手荚斯,其實就是使用三次TCP握手確認建立一個HTTP連接。
一般http中存在的問題:
- 請求信息明文傳輸查牌,容易被竊聽截取事期。
- 數(shù)據(jù)的完整性未校驗,容易被篡改
- 沒有驗證對方身份纸颜,存在冒充危險
HTTPS
為了解決上述HTTP存在的問題兽泣,就用到了HTTPS。
HTTPS 協(xié)議(HyperText Transfer Protocol over Secure Socket Layer)
:一般理解為HTTP+SSL/TLS
胁孙,通過 SSL證書
來驗證服務器的身份唠倦,并為瀏覽器和服務器之間的通信進行加密。
SSL/TLS又是什么涮较? SSL(Secure Socket Layer稠鼻,安全套接字層)
1994年為 Netscape 所研發(fā),SSL 協(xié)議位于 TCP/IP 協(xié)議與各種應用層協(xié)議之間狂票,為數(shù)據(jù)通訊提供安全支持候齿;TLS(Transport Layer Security,傳輸層安全)
其前身是 SSL
HTTPS的工作原理
(1)客戶使用https的URL訪問Web服務器,要求與Web服務器建立SSL連接慌盯。
(2)Web服務器收到客戶端請求后周霉,會將網(wǎng)站的證書信息(證書中包含公鑰)傳送一份給客戶端。
(3)客戶端的瀏覽器與Web服務器開始協(xié)商SSL連接的安全等級润匙,也就是信息加密的等級诗眨。
(4)客戶端的瀏覽器根據(jù)雙方同意的安全等級,建立會話密鑰孕讳,然后利用網(wǎng)站的公鑰將會話密鑰加密匠楚,并傳送給網(wǎng)站。
(5)Web服務器利用自己的私鑰解密出會話密鑰厂财。
(6)Web服務器利用會話密鑰加密與客戶端之間的通信芋簿。
HTTPS的缺點
- HTTPS協(xié)議握手階段比較費時,會使頁面的加載時間延長近50%璃饱,增加10%到20%的耗電与斤;
- HTTPS連接緩存不如HTTP高效,會增加數(shù)據(jù)開銷和功耗荚恶,甚至已有的安全措施也會因此而受到影響撩穿;
- SSL證書需要錢,功能越強大的證書費用越高谒撼,個人網(wǎng)站食寡、小網(wǎng)站沒有必要一般不會用。
- SSL證書通常需要綁定IP廓潜,不能在同一IP上綁定多個域名抵皱,IPv4資源不可能支撐這個消耗。
- HTTPS協(xié)議的加密范圍也比較有限辩蛋,在黑客攻擊呻畸、拒絕服務攻擊、服務器劫持等方面幾乎起不到什么作用悼院。最關鍵的伤为,SSL證書的信用鏈體系并不安全,特別是在某些國家可以控制CA根證書的情況下据途,中間人攻擊一樣可行钮呀。
HTTPS和HTTP的區(qū)別
- https協(xié)議需要到ca申請證書或自制證書。
- http的信息是明文傳輸昨凡,https則是具有安全性的ssl加密爽醋。
- http是直接與TCP進行數(shù)據(jù)傳輸,而https是經(jīng)過一層SSL(OSI表示層)便脊,用的端口也不一樣蚂四,前者是80(需要國內(nèi)備案),后者是443。
- http的連接很簡單遂赠,是無狀態(tài)的久妆;HTTPS協(xié)議是由SSL+HTTP協(xié)議構建的可進行加密傳輸、身份認證的網(wǎng)絡協(xié)議跷睦,比http協(xié)議安全筷弦。