Http
在Web應(yīng)用中痛悯,服務(wù)器把網(wǎng)頁傳給瀏覽器,實際上就是把網(wǎng)頁的HTML代碼發(fā)送給瀏覽器奠滑,讓瀏覽器顯示出來。因此妒穴,HTTP是在網(wǎng)絡(luò)上傳輸HTML的協(xié)議宋税,用于瀏覽器和服務(wù)器的通信,它基于TCP/IP協(xié)議棧來傳遞數(shù)據(jù)宰翅。
HTTP主要特點
1.簡單快速:客戶向服務(wù)器請求服務(wù)時弃甥,只需傳送請求方法和路徑爽室。請求方法常用的有GET汁讼、HEAD淆攻、POST。每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類型不同嘿架。由于HTTP協(xié)議簡單瓶珊,使得HTTP服務(wù)器的程序規(guī)模小,因而通信速度很快耸彪。
2.靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對象伞芹。正在傳輸?shù)念愋陀蒀ontent-Type加以標(biāo)記。
3.無連接:無連接的含義是限制每次連接只處理一個請求蝉娜。服務(wù)器處理完客戶的請求唱较,并收到客戶的應(yīng)答后,即斷開連接召川。采用這種方式可以節(jié)省傳輸時間南缓。但在Http1.1和部分Http1.0提出持久連接,持久連接的特點是荧呐,只要任意一端沒有明確提出斷開連接汉形,則保持 TCP 連接狀態(tài)澎羞。
4.無狀態(tài):HTTP 協(xié)議自身不對請求和響應(yīng)之間的通信狀態(tài)進行保存涌穆。也就是說在 HTTP 這個級別,協(xié)議對于發(fā)送過的請求或響應(yīng)都不做持久化處理蚌讼。因此引入了Cookie來管理狀態(tài)峰搪。
5.http請求只能由客戶端向服務(wù)端發(fā)起
HTTP協(xié)議的主要不足
1.通信使用明文(不加密)岔冀,內(nèi)容可能會被竊聽
由于 HTTP 本身不具備加密的功能,所以也無法做到對通信整體(使用 HTTP 協(xié)議通信的請求和響應(yīng)的內(nèi)容)進行加密概耻。即楣颠,HTTP 報文使用明文(指未經(jīng)過加密的報文)方式發(fā)送
2.不驗證通信方的身份,因此有可能遭遇偽裝
HTTP 協(xié)議中的請求和響應(yīng)不會對通信方進行確認咐蚯。也就是說存在“服務(wù)器是否就是發(fā)送請求中 URI 真正指定的主機童漩,返回的響應(yīng)是否真的返回到實際提出請求的客戶端”等類似問題。
3.無法證明報文的完整性春锋,所以有可能已遭篡改
所謂完整性是指信息的準(zhǔn)確度矫膨。若無法證明其完整性,通常也就意味著無法判斷信息是否準(zhǔn)確期奔。
HTTPS
HTTP+ 加密 + 認證 + 完整性保護=HTTPS
HTTPS 并非是應(yīng)用層的一種新協(xié)議侧馅。只是 HTTP 通信接口部分用SSL(Secure Socket Layer)和 TLS(Transport Layer Security)協(xié)議代替而已。通常呐萌,HTTP 直接和 TCP 通信馁痴。當(dāng)使用 SSL時,則演變成先和 SSL通信肺孤,再由 SSL和 TCP 通信了罗晕。簡言之济欢,所謂 HTTPS,其實就是身披SSL協(xié)議這層外殼的 HTTP小渊,在采用 SSL后法褥,HTTP 就擁有了 HTTPS 的加密、證書和完整性保護這些功能酬屉。
加密:HTTPS 采用共享密鑰加密和公開密鑰加密兩者并用的混合加密機制半等。
HTTPS驗證過程
1.客戶端發(fā)起一個http請求,告訴服務(wù)器自己支持哪些hash算法呐萨。
2.服務(wù)端把自己的信息以數(shù)字證書的形式返回給客戶端(證書內(nèi)容有密鑰公鑰杀饵,網(wǎng)站地址,證書頒發(fā)機構(gòu)谬擦,失效日期等)凹髓。證書中有一個公鑰來加密信息,私鑰由服務(wù)器持有怯屉。
3.驗證證書的合法性
客戶端收到服務(wù)器的響應(yīng)后會先驗證證書的合法性(證書中包含的地址與正在訪問的地址是否一致蔚舀,證書是否過期)。
4.生成隨機密碼(RSA簽名)
如果驗證通過锨络,或用戶接受了不受信任的證書赌躺,瀏覽器就會生成一個隨機的對稱密鑰(session key)并用公鑰加密,讓服務(wù)端用私鑰解密羡儿,解密后就用這個對稱密鑰進行傳輸了礼患,并且能夠說明服務(wù)端確實是私鑰的持有者。
5.生成對稱加密算法
驗證完服務(wù)端身份后掠归,客戶端生成一個對稱加密的算法和對應(yīng)密鑰缅叠,以公鑰加密之后發(fā)送給服務(wù)端。此時被黑客截獲也沒用虏冻,因為只有服務(wù)端的私鑰才可以對其進行解密肤粱。之后客戶端與服務(wù)端可以用這個對稱加密算法來加密和解密通信內(nèi)容了。
HTTP版本
http1.0:無連接,無狀態(tài),一次請求一個tcp連接
http1.1:持久連接,請求管道化(有一些缺陷)?,增加了host字段,緩存,斷點續(xù)傳
http2.0 :?二進制分幀(多路復(fù)用的實現(xiàn)基礎(chǔ)),?多路復(fù)用,頭部壓縮