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