http协议下需要服务器推送吗,HTTP/2.0 服务器推送实现
前言HTTP/2.0發(fā)布于2015年,作為新一代HTTP協(xié)議,其由于推進互聯(lián)網(wǎng)加密技術(shù)的使用,所以只能作用于https連接當(dāng)中。HTTP/2.0提供HTTP語義的有效序列化,是一個二進制協(xié)議,所有的框架開始一個8字節(jié)的頭,緊跟著的0和16.383個八位位組之間的有效載荷。當(dāng)然HTTP的復(fù)用性也是其一大特點,而新定義的HTTP請求與響應(yīng)映射到流的新互動模式,也就是我今天要說的服務(wù)器推送。
服務(wù)器推送
HTTP/2允許服務(wù)器在請求之前先推送響應(yīng)信息到客戶端(之前客戶端有過請求),如果實現(xiàn)了HTTP緩存,推送的響應(yīng)信息可以在客戶端被緩存(可通過no-cache進行配置)。
(注意:HTTP/2是持久連接,為了實現(xiàn)最佳性能,預(yù)計客戶端在確定不需要與服務(wù)器進一步通信時或者服務(wù)器關(guān)閉連接時才會關(guān)閉連接,所以客戶端不應(yīng)該打開多個同一IP與端口的連接。)
對于HTTP/2的推送詳細說明在官方文檔種過于繁雜,下面將以更為簡單的方式來進行說明。
普通請求
左圖表示一個正常情況下的一個簡單的頁面請求,一個HTML頁面我們要進行頁面請求與頁面包含的樣式文件請求,如果有頁面中有圖片等頁面文件時請求次數(shù)將會更多。
當(dāng)然,我們可以通過:
這種形式來進行資源預(yù)加載,但是不同類型的代碼整合已經(jīng)不符合代碼規(guī)則,雖然速度有所提升,但是HTTP請求次數(shù)并沒有減少。
服務(wù)器推送
右圖中表示通過只通過一次HTML請求,就同時把樣式、圖片等全部發(fā)送給瀏覽器,通過一次通信獲得所有資源。
實現(xiàn)方式
Nginx實現(xiàn)
在nginx的conf配置文件中,添加http2_push命令,表示請求根目錄"/"時,會推送這兩個文件。(如果有多個文目錄時需要寫多個,方法繁瑣,每次修改都要重啟,不推薦)server?{
listen?443?ssl?http2;
···//省略
location?/?{
···//省略
http2_push?/style.css;
http2_push?/example.png;
}
}
Apache 實現(xiàn)
在httpd.conf文件中加入(不推薦,理由同上)
Header?add?Link?";?rel=preload;?as=style"
Header?add?Link?";?rel=preload;?as=image"
后端實現(xiàn)
通過在應(yīng)用生成HTTP 回應(yīng)的頭信息中設(shè)置Link命令(推薦),服務(wù)器在收到包含Link的頭信息時,就會進行推送,例如:Link:?;?rel=preload;?as=style,?;?rel=preload;?as=image
服務(wù)器推送方式據(jù)說可以提高8%左右的打開速度,有興趣的朋友可以測試一下,有結(jié)果記得給我反饋一下哦。
總結(jié)
以上是生活随笔為你收集整理的http协议下需要服务器推送吗,HTTP/2.0 服务器推送实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谁是 2022 年全球最畅销 OLED
- 下一篇: 智伴机器人安卓怎么设置个人热点_周五到!