iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 21
1
Modern Web

前端開發 30 個問題系列 第 21

HTTP, HTTPS, HTTP2

前言
2020 秋天,我將用 30 天的時間,來嘗試回答和網路前端開發相關的 30 個問題。30 天無法一網打盡浩瀚的前端知識,有些問題可能對有些讀者來說相對簡單,不過期待這趟旅程,能幫助自己、也幫助讀者打開不同的知識大門。有興趣的話,跟著我一起探索吧!

在幾天前的文章中有介紹到 HTTP,不過現在除了 HTTP 之外,我們可能還聽過 HTTPS 還有 HTTP2 等看起來像是不同種類的協議,今天就讓我們稍微來看一下吧

HTTP

1990 年前後,Tim Berners-Lee 提出了 HTML, HTTP 等和今日網際網路相關的協議,一開始只是希望能夠:

  • 建立一種文件格式 (HTML)
  • 透過一種交換方式 (HTTP)
  • 讓不同電腦之間 (client and server) 可以交換(或訪問)資訊

因此最初的 HTTP 相當簡單,只有今日 HTTP 的 start line,也就是

GET /index.html

server 回應的內容也很簡單,直接就是 HTML 檔案

<html>
<!-- content -->
</html>

後來大家發現,網際網路的建立,並透過它來交換資訊實在太方便了,因此,就在這個最初的版本上,一步步建立更完整的 HTTP 與網際網路的相關協議。

上面提到的最初版本的 HTTP,被稱作為 HTTP/0.9 版。進入 HTTP/1.0 之後,就加入了許多規定,譬如 HTTP request message 當中不僅僅包含了 start line,還有 headers, body 等資訊,也就帶來更好的擴展性,並可以分享更多不限於 text/html 類型的資訊。關於 HTTP message 的細節,可以參考先前的文章

HTTPS

然而 HTTP 本身因為是明文的資訊,因此在建立連線、傳輸資訊的過程中,HTTP messgae 有可能會被串改,也就是所謂的「中間人攻擊」,並造成資安上的問題。

因此在 1994 年,Netscape 推出了安全的 HTTP 傳輸協議: HyperText Transfer Protocol Secure (HTTPS),在 HTTPS 下,同樣是透過 TCP/IP 的方式連線,不過跟先前 HTTP 不同的是,HTTPS 的資訊會透過 SSL/TLS 的方式進行加密,包含 HTTP headers 以及所有的 request 和 response 資訊。

還有一點不一樣的是,HTTPS 預設的 port 為 443 而不是原本 HTTP 的 80。也因為需要作加密的計算,因此在速度上就會稍微慢一點。想多了解關於 HTTPS 加密的細節,可以參考前端三十|28. [WEB] HTTP 和 HTTPS 的差別是什麼?

HTTP2

在 HTTP/1.0 誕生後,許多人持續推動著 HTTP 的發展,新版本的 HTTP: HTTP/2 在 2015 年被批准,許多瀏覽器也開始支援 HTTP/2,全球網站的支援程度也逐漸提升當中。

跟 HTTP/1.0 或 HTTP/1.1 相比,HTTP/2 同樣是非 SSL/TLS 加密連線,不過在效能上有不少的提升,像是處理了 " head-of-line blocking" 問題,

Head-of-line blocking 意思是隊頭阻塞。在 HTTP/1 當中進行 TCP 連線的時候,同一個 TCP 連線管道只能處理一個請求,如果前面的請求處理延遲的話,就會影響到後面的請求,造成阻塞的現象發生。在 HTTP/2 當中,就可以在同一個連線管道中,不用按照時間順序來處理請求。

另一方面,也透過 HPACK 演算法來壓縮 headers 當中的資訊,以及用二進位的方式打包資料(非加密),提升資訊解析的效率。

End

今天很快的看過 HTTP/1, HTTPS, HTTP/2 三種不同的協議,當中當然還有許多的細節可以深入研究。未來要打造專案的時候,別忘記不同的 HTTP 協議的存在喔。

Ref


TD
Be curious as astronomer, think as physicist, hack as engineer, fight as baseball player

More about me

"Life is like riding a bicycle. To keep your balance, you must keep moving."


上一篇
Virtual DOM
下一篇
WebSocket
系列文
前端開發 30 個問題31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言