科技來自於人性,知識的傳遞原本是透過書本或口述,但是當網路出現後,人們想要在上傳遞資訊,就得要制定出一些規則,經過不斷修改,最後總結成了一個協定,把它命名為 HyperText Transfer Protocol。
HTTP
一種網路傳輸協定,全名是:HyperText Transfer Protocol,設計初衷是為了傳輸 HTML,中間也推出了數個版本,現今最被廣泛使用的是 HTTP1.1。
HTTP 進程
- HTTP/0.9:已過時。只接受GET一種請求方法,沒有在通訊中指定版本號,且不支援請求頭。由於該版本不支援POST方法,因此用戶端無法向伺服器傳遞太多資訊。
- HTTP/1.0:這是第一個在通訊中指定版本號的HTTP協定版本,至今仍被廣泛採用,特別是在代理伺服器中。
- HTTP/1.1:持久連線被預設採用,並能很好地配合代理伺服器工作。還支援以管道方式在同時傳送多個請求,以便降低線路負載,提高傳輸速度。
※ 引述自 維基百科
HTTP & TCP
HTTP 是基於 TCP 協定,由 Client 發起,預設走 80 Port。
在網路分層中由上而下依序是應用、表現、會議、傳輸、網路、鏈結、實體, TCP 是傳輸層協定,HTTP 是應用層,也就是說這是不一樣的東西,TCP 是解決數據如何在網路傳輸,HTTP 是解決如何包裝數據。
HTTP keep-alive
在 HTTP/1.0 的時候預設的方式是沒有 keep-alive,每一次的連線都是獨立的,在 HTTP/1.1 的時候 keep-alive 是預設開啟的,當多個 request 到同一台時會使用同一個 TCP 連線來傳送和接收,因開關 TCP 連線是有時間成本和 CPU 成本的,如此一來可獲得低網路阻塞和優化效能等等的好處。
Why HTTPS?
資訊安全無疑是近幾年討論的話題之一,不論是企業或是個人都需要“保密防諜”,且在 Chrome 56 開始會將網頁的安全資訊直接顯示在網址列,綠色勾勾就跟一個認證一樣,而後 Firefox 51 也跟進這個機制。
HTTPS
全名是:Hyper Text Transfer Protocol over Secure Socket Layer,是 Netscape 在 1994 年創建,簡單來說 HTTPS 就是 HTTP 的加強版,在 HTTP 上增加了 SSL/TLS 的協定。原本在 HTTP 上的傳遞是明碼的,不加密的狀態下可能有幾項風險:
- 竊聽風險(eavesdropping):第三方可以獲知通信內容。
- 篡改風險(tampering):第三方可以修改通信內容。
- 冒充風險(pretending):第三方可以冒充他人身份參與通信。
所以就基於 HTTP 再加上了加密的協議,SSL/TLS 協議是為了解決這三大風險而設計的,希望達到:
- 所有信息都是加密傳播,第三方無法竊聽。
- 具有校驗機制,一旦被篡改,通信雙方會立刻發現。
- 配備身份證書,防止身份被冒充。
SSL & TLS
SSL 全名:Secure Sockets Layer,是由 NetScape 所設計,經過了多次的修改而廣泛被應用,之後 IETF 將 SSL 進行標準化,並改名為 TLS,全名為:Transport Layer Security。
對稱加密 & 非對稱加密 & HASH
- 對稱加密:加密和解密使用同一個金鑰的加密演算法。
- 非對稱加密:需兩個金鑰來進行加密和解密,分別是公鑰 (public key) 和私鑰 (private key)。
- HASH:也稱為雜湊。MD5雜湊演算法可以將任意長度的資料經由運算之後,得到一組固定長度為 128 位元 (32 個十六進制數字) 的結果,我們可以使用這個結果當作檢查碼 (Checksum)。
運作原理
用對稱加密來加密網頁,用非對稱加密來保護對稱加密的金鑰,這樣互補了兩個演算法的缺點。那麼如何保證非對稱加密的公鑰不被篡改呢? 只要將公鑰放在數位證書中,只要證書是可信的,公鑰就是可信的。因此,SSL/TLS協議的基本過程是這樣的:
- 客戶端向伺服器端要求並驗證非對稱加密算法的公鑰。
- 雙方協商生成對稱加密算法的 “對話密鑰”。
- 雙方採用對稱加密算法和它的 “對話密鑰” 進行加密通信。
上面過程的前兩步,又稱為 “握手階段” (handshake)。
感覺越寫越多,但這篇只是淺談,所以先講到此,有機會再開一篇來細說。
Why HTTP2?
前面說了 HTTP & HTTPS 通訊協定是全球資訊網 (WWW) 的基礎,在 Internet 上佔了很大一部分,這幾十年網路生態的改變,成長之快,數量之多,任何一點點的效能速度都足以產生巨大影響。在這久未更新的協定中缺點也就越來越明顯了。以下有幾個參考可以觀察出 HTTP2 在速度上的優異:
HTTP2
前面說了 HTTP & HTTPS 通訊協定是全球資訊網 (WWW) 的基礎,而HTTP2 是自 1999 年 HTTP1.1 以來最重要的一次升級,主要目的是為了改善網頁的下載速度, 目前各大瀏覽器包括 Chrome、Safari、Firefox、IE/Edge 都已經支援 HTTP2。
隨著網頁的內容越來越複雜,有時候甚至於一個網站數十或數百個 request 到 server。在 HTTP1.1 時,每一個請求都必須佔用一個連線 (TCP connection),為了加速網站只好開多個連線併發請求。而在 HTTP2 改善了這一點,差別如下:
- 連線多工 (Multiplexing),在單一網路連線上,就可以同時傳輸多個 HTTP Request 和 Response,併發請求 CSS/JS/Images 等等資源。它的原理是將 Requests/Responses 都拆碎成小的 frames 進行傳輸,且這些 frames 是可以交錯的,因此檔案再多也不怕,不會發生佔用網路連線 (TCP connection) 的情況。也只需要單一連線就可以處理。
- 可決定檔案優先順序
- Header 壓縮
需要 HTTPS
要先擁有 TLS/SSL 安全性憑證,除了有更快速度,同時也要求了更好的網路安全。
後記
其實在寫這篇的過程中,好幾度煞不住車,越寫越細,包括各個協定的細節、原理還有延伸出去的技術,甚至於實作的部分,導致於篇幅越來越大,但是怕這篇會變成大雜燴,就只好先簡述個大概了,待以後再補完各個的細節及實作。