HTTP/2:顯著提升網頁加載速度的網絡協議
核心要點:
- HTTP/2 (2015年發布) 通過壓縮HTTP頭部、實現服務器推送和在單一連接上多路復用請求,解決了其前身HTTP/1.1的延遲問題。它還旨在解決隊首阻塞問題,並默認要求加密。
- 從HTTP/1.1到HTTP/2的過渡並非沒有挑戰,因為需要與現有網站保持向後兼容性。任何對協議的改進都必須以不中斷互聯網的方式實現。
- 所有主流瀏覽器目前都支持HTTP/2,但是,它們要求所有HTTP/2請求都必須加密,而這並非HTTP/2規範本身的要求。
- 在服務器上實現HTTP/2通常涉及將服務器軟件或託管環境升級到支持HTTP/2的版本,並配置服務器以啟用HTTP/2功能。需要注意的是,HTTP/2需要SSL證書,因此網站需要通過HTTPS提供服務。
HTTP協議的演進:
互聯網的基礎架構——或物理網絡層——之上是互聯網協議(作為TCP/IP或傳輸層的一部分)。它是我們大多數互聯網通信的基礎架構。
在其之上是應用層,各種應用程序使用不同的協議來連接和傳輸信息。例如,我們有用於發送和接收電子郵件的SMTP、POP3和IMAP;用於聊天的IRC和XMPP;用於遠程服務器訪問的SSH等等。
其中最著名的協議,也是互聯網使用的代名詞,是HTTP(超文本傳輸協議)。我們每天都使用它來訪問網站。它早在1989年就由蒂姆·伯納斯·李在CERN設計出來。 1.0版本的規範於1996年發布(RFC 1945),1.1版本於1999年發布。
HTTP規範由萬維網聯盟維護,可以在https://www.w3.org/standards/techs/HTTP找到。
第一代HTTP協議(1.0和1.1版本)主導了互聯網直到2015年,HTTP/2發布後,行業(Web服務器和瀏覽器廠商)才開始採用它。
HTTP/1.1的局限性:
HTTP是一個無狀態協議,基於請求-響應結構,這意味著客戶端向服務器發出請求,這些請求是原子的:任何單個請求都不知道之前的請求。 (這就是為什麼我們使用cookie——例如,為了在一個用戶會話中連接多個請求,以便能夠向已登錄用戶提供網站的已認證版本)。
傳輸通常由客戶端(用戶的瀏覽器)啟動,服務器通常只響應這些請求。
可以說,當前的HTTP狀態相當“笨拙”,或者更確切地說,是低級的,需要為瀏覽器和服務器提供大量“幫助”,以說明如何有效地進行通信。在這個領域進行更改並非易事,因為許多現有網站的功能依賴於與任何引入的更改的向後兼容性。任何旨在改進協議的操作都必須以不會中斷互聯網的無縫方式進行。
在許多方面,這種嚴格的請求-響應、原子、同步模型已經成為瓶頸,而進展主要採取了黑客的形式,通常由谷歌、Facebook等行業領導者牽頭。通常的情況(正在以各種方式改進)是訪問者請求一個網頁,當他們的瀏覽器從服務器接收它時,它會解析HTML並找到渲染頁面所需的其它資源,如CSS、圖像和JavaScript。當它遇到這些資源鏈接時,它會停止加載所有其他內容,並向服務器請求指定的資源。在收到此資源之前,它不會移動分毫。然後它請求另一個資源,依此類推。
世界頂級網站加載所需的請求數量通常在數百個。
這包括大量的等待時間,以及許多往返時間,在此期間,訪問者只能看到白屏或半渲染的網站。這些都是浪費的幾秒鐘。在這些請求週期中,大量可用的帶寬只是閒置未使用。
CDN可以減輕很多這些問題,但它們也只是權宜之計。
正如Mozilla的Daniel Stenberg(參與HTTP/2標準化的人員之一)所指出的那樣,該協議的第一個版本很難充分利用底層傳輸層TCP的容量。一直致力於優化網站加載速度的用戶知道,這通常需要一些創造力,委婉地說。
隨著時間的推移,互聯網帶寬速度大幅提高,但HTTP/1.1時代的基礎設施並沒有充分利用這一點。它仍然難以應對諸如HTTP流水線——通過相同的TCP連接推送更多資源——等問題。瀏覽器中的客戶端支持拖後腿最多,Firefox和Chrome默認情況下禁用它,或者根本不支持它,例如IE、Firefox 54 版本等。這意味著即使是很小的資源也需要打開一個新的TCP連接,以及隨之而來的所有膨脹——TCP握手、DNS查找、延遲……由於隊首阻塞,一個資源的加載會導致阻止所有其他資源的加載。
同步非流水線連接與流水線連接的對比,顯示了可能的加載時間節省。
在HTTP/1模型下,Web開發人員必須採用的一些優化技巧來優化他們的網站包括圖像精靈、CSS和JavaScript連接、分片(將訪問者的資源請求分佈到多個域或子域)等等。
改進是必要的,它必須以一種無縫的、向後兼容的方式解決這些問題,以免中斷現有Web的工作。
SPDY和HTTP/2:
2009年,谷歌宣布了一個項目,該項目將成為新一代協議SPDY(發音為speedy)的草案提案,為Chrome添加支持,並在隨後幾年將其推向其所有Web服務。隨後,Twitter和Apache、nginx等服務器廠商也提供了支持,Node.js,後來還有Facebook、WordPress.com和大多數CDN提供商。
SPDY引入了多路復用——通過單個TCP連接並行發送多個資源。連接默認加密,數據被壓縮。首先,SPDY白皮書中對前25個網站進行的初步測試顯示,速度提高了27%到60%以上。
在生產環境中證明其有效性後,SPDY 3版成為2015年超文本傳輸協議工作組httpbis制定的HTTP/2第一個草案的基礎。
HTTP/2旨在通過以下方式解決困擾第一版協議的延遲問題:
- 壓縮HTTP頭部
- 實現服務器推送
- 在單一連接上多路復用請求
它還旨在解決隊首阻塞問題。它傳輸的數據採用二進制格式,提高了效率,並且默認需要加密(或者至少,這是主流瀏覽器施加的要求)。
頭部壓縮使用HPACK算法執行,解決了SPDY中的漏洞,並將Web請求大小減少了一半。
服務器推送是旨在解決浪費的等待時間的特性之一,它在瀏覽器請求之前向瀏覽器的服務器提供資源。這減少了往返時間,這是網站優化的一個主要瓶頸。
由於所有這些改進,HTTP/2帶來的加載時間差異可以在imagekit.io的示例頁面上看到。
加載時間的節省越多的網站資源越明顯。
如何查看網站是否通過HTTP/2提供資源:
在Firefox或Chrome等主流瀏覽器中,我們可以在檢查器工具中檢查網站對HTTP/2協議的支持,方法是打開“網絡”選項卡,然後右鍵單擊資源列表上方的條帶。在這裡,我們可以啟用“協議”項。
服務器端實現:
截至撰寫本文時,所有主流瀏覽器都支持HTTP/2,儘管需要對所有HTTP/2請求進行加密,而HTTP/2規範本身並不需要加密。
服務器
Apache 2.4通過其mod_http2模塊支持它,該模塊現在應該已經可以投入生產了。 Apache需要通過向./configure命令添加--enable-http2參數來構建它。我們還需要確保至少安裝了1.2.1版本的libnghttp2庫。如果系統難以找到它,我們可以通過添加--with-nghttp2=
下一步是通過將指令添加到Apache的配置中來加載模塊:
<code>LoadModule http2_module modules/mod_http2.so</code>
然後,我們將Protocols h2 h2c http/1.1添加到我們的虛擬主機塊並重新加載服務器。 Apache的文檔警告我們啟用HTTP/2時的注意事項:
在您的Apache服務器上啟用HTTP/2會影響資源消耗,如果您有一個繁忙的站點,您可能需要仔細考慮其影響。
啟用HTTP/2後,首先要注意的是您的服務器進程將啟動額外的線程。原因是HTTP/2將其接收到的所有請求都交給其自己的工作線程進行處理,收集結果並將它們流式傳輸到客戶端。
您可以在這裡閱讀更多關於Apache配置的信息。
nginx從1.9.5版本開始就支持HTTP/2,我們只需將http2參數添加到我們的虛擬主機規範中即可啟用它:
<code>server { listen 443 ssl http2 default_server; ssl_certificate server.crt; ssl_certificate_key server.key;</code>
然後重新加載nginx。
不幸的是,截至撰寫本文時,服務器推送尚未正式實現,但它已被添加到開發路線圖中,計劃於明年發布。對於更具冒險精神的人來說,有一個非官方的nginx模塊可以添加對HTTP/2服務器推送的支持。
LiteSpeed和OpenLiteSpeed也吹噓支持HTTP/2。
在服務器端激活HTTP/2之前的一個注意事項是確保我們有SSL支持。這意味著我們上面提到的所有虛擬主機代碼段——對於Apache和nginx——都需要進入SSL版本的虛擬主機塊,監聽443端口。一旦我們安裝了Apache或nginx,並且我們已經配置了常規虛擬主機,獲取LetsEncrypt SSL證書並在任何主要Linux發行版上安裝它應該只是幾行代碼的問題。 Certbot是一個命令行工具,可以自動化整個過程。
總結:
在本文中,我簡要概述了HTTP/2,這是一個新興的第二代Web協議規範。
可以在此處找到新一代HTTP的完整實現列表。
對於不太懂技術的人來說,過渡到這個新協議的捷徑可能是簡單地在Web堆棧中實現CDN,因為CDN是最早採用HTTP/2的廠商之一。
HTTP/2常見問題解答:
(此處省略FAQ部分,因為與之前的輸出內容高度重複)
以上是HTTP/2:背景,績效優勢和實施的詳細內容。更多資訊請關注PHP中文網其他相關文章!

絕對會話超時從會話創建時開始計時,閒置會話超時則從用戶無操作時開始計時。絕對會話超時適用於需要嚴格控制會話生命週期的場景,如金融應用;閒置會話超時適合希望用戶長時間保持會話活躍的應用,如社交媒體。

服務器會話失效可以通過以下步驟解決:1.檢查服務器配置,確保會話設置正確。 2.驗證客戶端cookies,確認瀏覽器支持並正確發送。 3.檢查會話存儲服務,如Redis,確保其正常運行。 4.審查應用代碼,確保會話邏輯正確。通過這些步驟,可以有效診斷和修復會話問題,提升用戶體驗。

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

設置httponly標誌對會話cookie至關重要,因為它能有效防止XSS攻擊,保護用戶會話信息。具體來說,1)httponly標誌阻止JavaScript訪問cookie,2)在PHP和Flask中可以通過setcookie和make_response設置該標誌,3)儘管不能防範所有攻擊,但應作為整體安全策略的一部分。

phpsessions solvathepromblymaintainingStateAcrossMultipleHttpRequestsbyStoringDataTaNthEserVerAndAssociatingItwithaIniquesestionId.1)他們儲存了AtoredAtaserver side,通常是Infilesordatabases,InseasessessionIdStoreDistordStoredStoredStoredStoredStoredStoredStoreDoreToreTeReTrestaa.2)

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考慮使用AttActAcks.s.s.4)

會話再生是指在用戶進行敏感操作時生成新會話ID並使舊ID失效,以防會話固定攻擊。實現步驟包括:1.檢測敏感操作,2.生成新會話ID,3.銷毀舊會話ID,4.更新用戶端會話信息。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Dreamweaver CS6
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。