進度條

還在為自架網站連線太慢煩惱嗎?何不試試HTTP2?

除了流星花園出2,你應該也要聽過HTTP/2

作者: Vincent Ke 更新日期:

如果常使用瀏覽器的各位,在網址輸入列上看到的"HTTP"絕對毫不陌生,但說到解釋一事想必大家都無法一語道盡,只能回頭翻翻封塵已久的計概課本來溫習一下,但這個讓人熟悉的陌生人竟然在2015年進化到2了,讓人不禁聯想到之前Google全面大力推行的HTTP"S",到底這些HTTP家族是葫蘆裡賣什麼藥呢?各自又有什麼情愛糾葛?讓我們繼續看下去吧

 

 

HTTP的全名為超文本傳輸協定(英文:HyperText Transfer Protocol,縮寫:HTTP)是一種用於分佈式、協作式和超媒體資訊系統的應用層協議,也是是全球資訊網Internet的資料通訊的基礎。

 

設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。通過HTTP或者HTTPS協定請求的資源由統一資源識別元(Uniform Resource Identifiers,URI)來標識,簡單來說,Htttp就是往返“瀏覽器”與“WEB Server”的通訊協異,把我們的需求可視覺化的拆解後進行呈現。

 

僅管中間還會有像是閘道和代理伺服器等等的中間層角色,但如果一言以蔽之的說,代表我們所寫的Html頁面會放置到所謂的WEB Server上,而用戶們就可以透過瀏覽器訪問URL的方式,來向網頁進行Request,並得到訪問的內容,但是在Web2.0之後,我們的頁面就不單只是Html這麼簡單,其中除了我們常見的文字、圖片之外,還多了有CSS、JS等等,那HTTP這樣的通訊協議當然也要不斷的衍生進化囉。

 

在最早的HTTP/0.9 及 HTTP/1.0裡,僅具備最基本的GET功能,每一個Request都會獨立的進行處理,並且在處理結束後就釋放連接,這樣的方式不僅速度緩慢,更造成網路嚴重的壅塞,以及堪憂的安全性問題。

 

 

而到了熟悉的HTTP/1.1協定之後,才多了新定義的8種呼叫方式,也就是我們熟悉的GET

 

(向指定的資源發出「顯示」請求)、HEAD(與GET方法一樣,都是向伺服器發出指定資源的請求。只不過伺服器將不傳回資源的本文部份 )、POST(向指定資源提交資料,請求伺服器進行處理)、PUT(向指定資源位置上傳其最新內容)、DELETE(請求伺服器刪除Request-URI所標識的資源)、TRACE(測試或診斷回顯伺服器收到的請求 )、(使伺服器傳回該資源所支援的所有HTTP請求方法測試伺服器功能是否正常運作 )和Connect( HTTP/1.1協定中預留給能夠將連線改為管道方式的代理伺服器)和Patch(部分修改並應用)

 

當然除了上述的請求方式修正外,更多了一些區別如下:

 

1. 缓存處理:HTTP/1.1使用了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等来控制缓存策略。

 

2. 帶寬優化及網路連接的使用提升:HTTP/1.0中,如果我們只是需要請求目標的一部分,伺服器往往會將整个全文回傳,途中若是斷線更不支援續傳功能,而在HTTPS/1.1中大幅改善

 

3. 錯誤訊息管理:在HTTP/1.1中新增了24錯誤代碼,像我們常見的500、404就是囉!

 

4. Host 處理:可在一台Server上存在多個虛擬主機,並共享同一個IP

 

5. 持久連接PersistentConnection:HTTP/ 1.1支持持久連接和 HTTP管線化(pipelining),也就是將多個HTTP请求(request)整批送出的技術,而在傳送過程中不需先等待伺服端的回應,使Html網頁載入的速度和動態提升

 

 

但在HTTP/1.1(或之後)的版本中,卻仍然隱藏著安全性的問題,例如針對傳輸的内容都是明文,不管是客户端還是Server都無法去驗證身分,這點若是套在行動支付上,會有一定程度上的資安風險,加上移動裝置的發明,讓這樣的通訊協定開始不敷使用了,於是HTTPS就儼然誕生了,說穿了他就是安全版的HTTP,透過" TLS/SSL"技術在傳送過程中使之加密,也是現在像FireFox、Chorme及iOS 10以上的現行版本,但若要使用這個"S",卻是要另外申請證書並且收費的唷,而且這中間對網站的改造更是一筆不小的成本。

 

 

於是2012年google提出提出了SPDY(發音如英語:speedy),廣大的工程師及使用群們才終於正面看待和解决老版本HTTP協議本身上的問題,簡單說SPDY可以是综合了HTTPS和HTTP的傳輸協議,可以藉由通過優先級和多路復用,SPDY使得只需要建立一個TCP連線即可傳送網頁內容及圖片等資源,有效降低網頁的載入時間,另外SPDY中廣泛應用了 TLS/SSL加密,傳輸內容也均以gzip或DEFLATE格式壓縮(與HTTP不同,HTTP的頭部並不會被壓縮),保有了HTTPS的安全性。另外,除了像HTTP的網頁伺服器被動的等待瀏覽器發起請求外,SPDY的網頁伺服器還可以主動推播內容。

 

SPDY也就是HTTP/2的前身,而HTTP/2的關鍵功能主要來自SPDY技術,換言之,SPDY的成果最終演變為HTTP/2,在1.1漫長的16年等待,不用像永遠到不了的大都終於問世了。HTTP/2 在2015年2月正式發佈,不僅擔保和 HTTP/ 1.1 語意上的完全兼容,因此Server端若要使用 HTTP/2,是完全不需要修改 HTML/CSS/JavaScript 網頁和所有後端程式,只要透過升級和設定 Web 伺服器軟體,加上一個可以支援 HTTP/2 的瀏覽器,就可以使用這個超快的通訊協定。,更提出了以下優化的特點:

 

 

1. 過去HTTP/ 1.1,瀏覽器為了加速下載時間,可同時允許六個網路連線(TCP connection)同時去連接伺服器,達成同時下載六個資源的目的。而未來2.0可以透過單一網路連線(Single TCP connection),就可以連接Server下載所有需要的資源。

 

2.連線多工(Multiplexing):承上,我們可以在單一網路連線上,同時傳輸多個 HTTP Request 和 Response,同時併發請求 CSS/JS/Images 等等資源。其中的作用是原理是將 Requests/Responses 都拆碎成小 frames 進行傳輸,而這些 frames 是可以交錯的,更不會發生佔用網路連線(TCP connection)的情況。對於使用者來說,過去每一到餐點都必須有優先順序性的上餐,現在我們可以一次同時領取全部的餐點囉,另外更提供伺服器主動推送資源(Server Push),允許伺服器除了 HTML 之外,連同需要的 CSS/JavaScript/Images 檔案,主動推到瀏覽器的快取之中

 

3.優先權設計(Prioritization):Server可以決定例如 CSS 或 JavaScript 檔案,哪些要優先傳送。

 

4.Header 壓縮: HTTP/2 用了 HPACK 壓縮技術,大大減少每次都要重複傳輸一樣的 Headers。

 

5.Binary 二進位的封包結構設計,使Server和可以更快的解析這些資料。

 

這麼強大的2.0又可以向下兼容,想必是讓人心動不如趕快行動,其實像是Google、Yahoo、Facebook等網站龍頭都已經升級成HTTP/2了,但唯一心痛的是,基於通訊協議及安全性上的考量,若要使用HTTP/2,則必須仍要有 TLS/SSL 的 安全性憑證才可以,也就是說如果妳的網站或產品,已經升級到HTTPS的話,那升級成HTTP/2就相當簡單囉,如果妳是使用NGINX,只要在配置中起動相對應的通訊協議就可以囉。

 


最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!

Medium vincent

Vincent Ke

喜歡把混亂的事情變的簡單 用嘴巴做事其實很可以 但要結合靈活的腦袋思考 就一起來拆解吧