摘要:通過或者協(xié)議請求的資源由統(tǒng)一資源標(biāo)識符,來標(biāo)識。標(biāo)準(zhǔn)于年月以正式發(fā)表,替換成為的實現(xiàn)標(biāo)準(zhǔn)。該系列協(xié)議由谷歌開發(fā),于年公開。主流的瀏覽器谷歌火狐也都早已經(jīng)支持,它已經(jīng)成為了工業(yè)標(biāo)準(zhǔn)。配合負(fù)載均衡有層和層協(xié)議負(fù)載。
HTTP/2 is the future of the Web, and it is here!
使用 HTTP/1.1 和 HTTP/2 在相同環(huán)境各加載 300 多張小圖片,性能相差一倍。
你可以點擊這里的 DEMO 體驗一下,HTTP/2 的加載快感。
歷史超文本傳輸協(xié)議(英文:HyperText Transfer Protocol,縮寫:HTTP)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。設(shè)計 HTTP 最初的目的是為了提供一種發(fā)布和接收 HTML 頁面的方法。通過 HTTP 或者 HTTPS 協(xié)議請求的資源由統(tǒng)一資源標(biāo)識符(Uniform Resource Identifiers,URI)來標(biāo)識。
HTTP 的發(fā)展是由蒂姆·伯納斯-李于 1989 年在歐洲核子研究組織(CERN)所發(fā)起。由萬維網(wǎng)協(xié)會(World Wide Web Consortium,W3C)和互聯(lián)網(wǎng)工程任務(wù)組(Internet Engineering Task Force,IETF)制定標(biāo)準(zhǔn),最終發(fā)布了一系列的 RFC,其中最著名的是 1999 年 6 月公布的 RFC 2616,定義了 HTTP 協(xié)議中現(xiàn)今廣泛使用的一個版本——HTTP 1.1。
2014 年 12 月,互聯(lián)網(wǎng)工程任務(wù)組(IETF)的 Hypertext Transfer Protocol Bis(httpbis)工作小組將 HTTP/2 標(biāo)準(zhǔn)提議遞交至 IESG 進(jìn)行討論 [1],于 2015 年 2 月 17 日被批準(zhǔn)。[2] HTTP/2 標(biāo)準(zhǔn)于 2015 年 5 月以 RFC 7540 正式發(fā)表,替換 HTTP 1.1 成為 HTTP 的實現(xiàn)標(biāo)準(zhǔn)。
以上摘要自 維基百科。
SPDYSPDY(發(fā)音如英語:speedy)。實際上在 HTTP2 提出來之前,SPDY 流行了很長一段時間。該系列協(xié)議由谷歌開發(fā),于 2009 年公開。它的設(shè)計目標(biāo)是降低 50% 的頁面加載時間。當(dāng)下很多著名的互聯(lián)網(wǎng)公司都在自己的網(wǎng)站或 APP 中采用了 SPDY 系列協(xié)議(當(dāng)前最新版本是 SPDY/3.1),因為它對性能的提升是顯而易見的。主流的瀏覽器(谷歌、火狐、Opera)也都早已經(jīng)支持 SPDY,它已經(jīng)成為了工業(yè)標(biāo)準(zhǔn)。HTTP Working-Group 最終決定以 SPDY/2 為基礎(chǔ),開發(fā) HTTP/2。
突然在 Chrome 51 版本之后不支持 SPDY 了,Chrome 棄用了 SPDY,開始全面支持 HTTP2。
HTTP/2 的優(yōu)勢相比 HTTP/1.x,HTTP/2 在底層傳輸做了很大的改動和優(yōu)化:
每個服務(wù)器只用一個連接。HTTP/2 對每個服務(wù)器只使用一個連接,而不是每個文件一個連接。這樣,就省掉了多次建立連接的時間,這個時間對 TLS 尤其明顯,因為 TLS 連接費時間。
加速 TLS 交付。HTTP/2 只需一次耗時的 TLS 握手,并且通過一個連接上的多路利用實現(xiàn)最佳性能。HTTP/2 還會壓縮首部數(shù)據(jù),省掉 HTTP/1.x 時代所需的一些優(yōu)化工作,比如拼接文件,從而提高緩存利用率。
簡化 Web 應(yīng)用。使用 HTTP/2 可以讓 Web 開發(fā)者省很多事,因為不用再做那些針對 HTTP/1.x 的優(yōu)化工作了。
適合內(nèi)容混雜的頁面。HTTP/2 特別適合混合了 HTML、CSS、JavaScript、圖片和有限多媒體的傳統(tǒng)頁面。瀏覽器可以優(yōu)先安排那些重要的文件請求,讓頁面的關(guān)鍵部分先出現(xiàn),快出現(xiàn)。
更安全。通過減少 TLS 的性能損失,可以讓更多應(yīng)用使用 TLS,從而讓用戶信息更安全。
Can I use?在以下瀏覽器的版本都開始支持 HTTP2。
這就尷尬了!Android 4.4.4 也就是 Kitkat 版本以下都不支持 HTTP2,谷歌 2016 年 6 月份的數(shù)據(jù)顯示 該版本的用戶占 31.6%。
不過好消息是,支持 HTTP/2 的 Web Server 基本都支持 HTTP/1.1。這樣,即使瀏覽器不支持 HTTP/2,雙方也可以協(xié)商出可用的 HTTP 版本,沒有兼容性問題。
誰在用 HTTP2推薦一個瀏覽器插件HTTP/2 and SPDY indicator,藍(lán)色的小圖標(biāo)亮起,就表示該網(wǎng)站使用了 HTTP/2 協(xié)議。
大公司已經(jīng)走在了時代的前沿,我們這些追隨者有什么理由不跟上呢。
https://www.google.com
https://www.aliyun.com
https://www.youtube.com
https://www.facebook.com
https://twitter.com
。。。還有很多
不過百度這次又沒有跟上,不信你們自己去看。
服務(wù)器支持這里是 一覽,主流的開發(fā)語言和應(yīng)用服務(wù)器都已經(jīng)支持了 HTTP/2。
最佳實踐 安裝我們從 NGINX 開始,nginx 從 1.9.5 開始支持 HTTP/2。
openssl。建議全局安裝。
SSL/TLS。http2 嚴(yán)格要求使用 https,所以你得準(zhǔn)備一個證書。當(dāng)然也可以在 let"s encrypt 申請一個。
nginx 至少需要啟用 http_v2_module 和 http_ssl_module 這兩個模塊。先下載源碼,在安裝目錄執(zhí)行
./configure --with-http_v2_module --with-http_ssl_module make&&make install配置
重定向所有的請求到 SSL/TLS
server { listen 80; location / { return 301 https://$host$request_uri; } }
開啟 HTTP/2
server { listen 443 ssl http2 default_server; ssl_certificate server.crt; ssl_certificate_key server.key; ... }
最后一步,重啟 nginx
nginx -s reload
為了驗證 HTTP/2 是否開啟,你可以安裝瀏覽器插件 HTTP/2 and SPDY indicator 進(jìn)行查看。
負(fù)載均衡方案 向下兼容需要指出的是 HTTP/2 的服務(wù)器都是向下兼容的 HTTP/1.1 的,升級了之后,你不需要擔(dān)心,之前的老版本用戶怎么辦。訪問方式如下圖,
非完整鏈路的 HTTP/2 和 TLS客戶端使用期望的協(xié)議連接代理服務(wù)器,比如 TLS 或 HTTP/2,然后代理服務(wù)器再去連接應(yīng)用服務(wù)器、數(shù)據(jù)庫服務(wù)器等,但不需要使用相同的協(xié)議。
配合負(fù)載均衡LVS 有 4 層和 7 層協(xié)議負(fù)載。所謂四層就是基于 IP+端口的負(fù)載均衡;七層就是基于 URL 等應(yīng)用層信息的負(fù)載均衡。研究過阿里云的 SLB,暫時還不支持 HTTP/2 的支持,也沒有看到 AWS、IBM 有對應(yīng)的服務(wù)支持。所以我們能用的解決方案就是:
LVS 4 層 + HTTP/2 web Server
LVS 只做請求分發(fā),由應(yīng)用服務(wù)器來處理加密解密和 HTTP/2 的支持。這樣的方式,對性能影響有多少呢,需要實際的測試,不過目前來說,沒有其他方案。
不是銀彈 對于 web 前端HTTP1.1 時代,我們針對這個協(xié)議的特性做了很多 WEB 前端優(yōu)化,比如說 域名分片、文件合并壓縮、雪碧圖、行內(nèi)代碼等。但是到了 HTTP/2 時代,這些操作都是多余的了,對于同一個域名,只會建立起一個 TCP 連接。太多的域名還會增加新建連接的初始化和 TLS 握手的時間。
在采用 HTTP/2 之前,需要找出應(yīng)用了這些優(yōu)化的代碼,分析一下它們會不會影響你的應(yīng)用設(shè)計和工作流程。這樣在遷移到 HTTP/2 之后,就可以著手改造它們,甚至撤銷某些優(yōu)化
HTTPS 的壓力HTTPS 正式啟用之前還有很多問題要解決。
單連接開銷比較大。HPACK 數(shù)據(jù)壓縮算法會更新兩端的查找表。這樣可以讓連接有狀態(tài),而破壞狀態(tài)就意味著要重建查找表,另外單連接占用內(nèi)存較多
全站點 HTTPS 的改造。可能涉及到 web,CDN,native 客戶端。
其他問題需要拋棄針對 HTTP/1.x 的優(yōu)化。
對下載大文件不利。
你的客戶也許不在乎。你的客戶很可能不在乎他分享的自家貓咪的視頻是否受到 TLS 和 HTTP/2 的保護(hù)。
參考文獻(xiàn)https://imququ.com/post/protocol-negotiation-in-http2.html
使用 HTTP/2 提升性能的 7 個建議
NGINX 安裝 http/2
維基百科HTTP/2
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/11757.html
摘要:版本發(fā)布月日,官博發(fā)文宣告正式發(fā)布。官方文檔提供了如下的示例終端上的輸出熱門文章我在阿里云做前端抓住我們核心的競爭力,并同時發(fā)現(xiàn)業(yè)務(wù)中的問題,跨端推進(jìn)解決,這是最好的出路。 showImg(https://segmentfault.com/img/remote/1460000019038442); 【阿里云 TXD 前端月刊】- 熱門前端技術(shù)快報,聚焦業(yè)界新視界;前端領(lǐng)域急速發(fā)展的節(jié)奏...
摘要:版本發(fā)布月日,官博發(fā)文宣告正式發(fā)布。官方文檔提供了如下的示例終端上的輸出熱門文章我在阿里云做前端抓住我們核心的競爭力,并同時發(fā)現(xiàn)業(yè)務(wù)中的問題,跨端推進(jìn)解決,這是最好的出路。 showImg(https://segmentfault.com/img/remote/1460000019038442); 【阿里云 TXD 前端月刊】- 熱門前端技術(shù)快報,聚焦業(yè)界新視界;前端領(lǐng)域急速發(fā)展的節(jié)奏...
摘要:目前預(yù)覽版現(xiàn)在已經(jīng)可以在上使用,很快就可以在上使用。版本發(fā)布月日,官博發(fā)文宣告正式發(fā)布。距離年月發(fā)布版已有一年多了。官方表示,這是系列的最后一個版本,他們將全力準(zhǔn)備。發(fā)布時隔一年,如約而至,正式發(fā)布第一個版本。showImg(https://user-gold-cdn.xitu.io/2019/4/30/16a6c4a6f112f3d6); 【阿里云 TXD 前端月刊】- 熱門前端技術(shù)快報,...
摘要:版本發(fā)布月日,官博發(fā)文宣告正式發(fā)布。官方文檔提供了如下的示例終端上的輸出熱門文章我在阿里云做前端抓住我們核心的競爭力,并同時發(fā)現(xiàn)業(yè)務(wù)中的問題,跨端推進(jìn)解決,這是最好的出路。 showImg(https://segmentfault.com/img/remote/1460000019038442); 【阿里云 TXD 前端月刊】- 熱門前端技術(shù)快報,聚焦業(yè)界新視界;前端領(lǐng)域急速發(fā)展的節(jié)奏...
閱讀 752·2021-09-28 09:35
閱讀 2591·2019-08-29 11:25
閱讀 2154·2019-08-23 18:36
閱讀 1849·2019-08-23 16:31
閱讀 2065·2019-08-23 14:50
閱讀 3112·2019-08-23 13:55
閱讀 3286·2019-08-23 12:49
閱讀 2074·2019-08-23 11:46