搜尋
首頁後端開發php教程HTTP不同版本主要特性異同分析

HTTP不同版本主要特性異同分析

Jan 29, 2018 am 11:01 AM
http主要特性

HTTP有很多版本,每個版本也有自身的差異性, 本文是對HTTP不同版本主要特性的一個概述和總結,希望能幫助大家。

HTTP1.0

早先1.0HTTP版本,是一種無狀態、無連線的應用層協定.

HTTP1.0規定瀏覽器和伺服器保持短暫的連接,瀏覽器的每次請求都需要與伺服器建立一個TCP連接,伺服器處理完成後立即斷開TCP連線(無連線),伺服器不追蹤每個用戶端也不記錄過去的請求(無狀態)。

這種無狀態性可以藉助cookie/session機制來做身分認證和狀態記錄。而下面兩個問題就比較麻煩了。

首先,無連接的特性導致最大的效能缺陷就是無法重複使用連接。每次發送請求的時候,都需要進行一次TCP的連接,而TCP的連接釋放過程又是比較費事的。這種無連線的特性會使得網路的使用率非常低。

其次就是隊頭阻塞(head of line blocking)。由於HTTP1.0規定下一個請求必須在前一個請求回應到達之前才能發送。假設前一個請求回應一直不到達,那麼下一個請求就不發送,同樣的後面的請求也給阻塞了。

為了解決這些問題,HTTP1.1出現了。

HTTP1.1

對於HTTP1.1,不僅繼承了HTTP1.0簡單的特點,也克服了許多HTTP1 .0性能上的問題。

首先是長連接HTTP1.1增加了一個Connection字段,透過設定Keep-Alive可以保持HTTP連接不斷開,避免了每次客戶端與伺服器請求都要重複建立釋放建立TCP連接,提高了網路的使用率。如果用戶端想要關閉HTTP連接,可以在請求頭中攜帶Connection: false來告知伺服器關閉請求。

其次,是HTTP1.1支援請求管道化pipelining)。基於HTTP1.1的長連接,使得請求管線化成為可能。管線化使得請求能夠並行傳輸。舉個例子來說,假如回應的主體是一個html頁面,頁面中包含了很多img,這個時候keep-alive就起了很大的作用,能夠進行並行發送多個請求。 (客戶端依據網域名稱來向伺服器建立連接,一般PC瀏覽器會針對單一網域的伺服器同時建立6~8個連接,手機端一般控制在4~6個。客戶端能夠區分出每次請求的回應內容。

也就是說,HTTP

管道化可以讓我們把先進先出佇列從客戶端(請求佇列)遷移到服務端(回應佇列)。

HTTP不同版本主要特性異同分析如圖所示,客戶端同時發了兩個請求分別來取得html

css,假如說伺服器的css資源先準備就緒,伺服器也會先發送html再傳送css同時,管道化技術只是讓客戶端能夠往一個伺服器同時發送一組請求,假若客戶端想往這個相同的伺服器發起另一組請求,也必須等待上一組請求全部響應完畢。

可見,HTTP1.1

解決隊頭阻塞(

head of line blocking)還不徹底。同時「管道化」技術有各種各樣的問題,所以很多瀏覽器要么根本不支援它,要么就直接默認關閉,並且開啟的條件很苛刻...此外, HTTP1.1

也加入了

快取處理(強快取和協商快取[傳送門]),支援斷點傳輸,以及增加了Host欄位(使得一個伺服器能夠用來建立多個Web網站)。 HTTP2.0

HTTP2.0

的新功能大致如下:

二進位分幀

HTTP2.0

透過在應用層和傳輸層之間增加一個二進位分幀層,突破了

HTTP1.1的效能限制、改進傳輸效能。

可見,雖然HTTP2.0的協定和HTTP1.x協定之間的規範完全不同了,但實際上HTTP2.0並沒有改變HTTP1.x的語意。
簡單來說,HTTP2.0只是把原來HTTP1.xheaderbody部分用frame重新封裝了一層而已。

多路復用(連接共享)

下面是幾個概念:

  • 流(stream ):已建立連線上的雙向位元組流。

  • 訊息:與邏輯訊息對應的完整的一系列資料幀。

  • 幀(frame):HTTP2.0通訊的最小單位,每個訊框包含幀首部,至少也會標識出當前幀所屬的流(stream id)。

HTTP不同版本主要特性異同分析

從圖中可見,所有的HTTP2.0通訊都在一個連線上完成,這個連接可以承載任意數量的雙向資料流。

每個資料流以訊息的形式發送,而訊息由一或多個訊框組成。這些訊框可以亂序發送,然後再根據每個訊框首部的流標識符(stream id)重新組裝。

舉個例子,每個請求是一個資料流,資料流以訊息的方式發送,而訊息又分為多個幀,幀首部記錄stream id用來標識所屬的資料流,不同屬的幀可以在連接中隨機混雜在一起。接收者可以依照stream id將訊框再歸屬到各自不同的請求當中去。

另外,多工(連線共用)可能會導致關鍵請求被阻塞。 HTTP2.0裡每個資料流都可以設定優先權和依賴,優先權高的資料流會被伺服器優先處理和傳回給客戶端,資料流還可以依賴其他的子資料流。

首部壓縮

HTTP1.x中,首部元資料都是以純文字的形式發送的,通常會給每個請求增加500~800位元組的負載。

比如說cookie,預設情況下,瀏覽器會在每次要求的時候,把##​​#cookie附在header上面寄給伺服器. (由於cookie比較大且每次都重複發送,一般不儲存訊息,只是用來做狀態記錄和身分認證)

HTTP2.0使用encoder來減少需要傳輸的header大小,通訊雙方各自cache一份header fields表,既避免了重複header 的傳輸,又減少了需要傳輸的大小。高效率的壓縮演算法可以很大的壓縮header,減少發送包的數量從而降低延遲。

伺服器推送

伺服器除了對最初請求的回應外,伺服器還可以額外的向客戶端推送資源,而無需客戶端明確的請求。

總結

HTTP1.0

  • #無狀態、無連線

##HTTP1.1

    #持久連線
  • 請求管道化
  • 增加快取處理
  • 增加
  • Host

    欄位、支援斷點傳輸等

HTTP2.0

    二進位分幀
  • #多路復用(或連接共用)
  • 首部壓縮
  • 伺服器推送
  • 相關推薦:


關於HTTP/2伺服器推送

PHP之實作HTTP認證

實例分析PHP實作模擬http請求的方法

以上是HTTP不同版本主要特性異同分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
可以在PHP會話中存儲哪些數據?可以在PHP會話中存儲哪些數據?May 02, 2025 am 12:17 AM

phpsessionscanStorestrings,數字,數組和原始物。

您如何開始PHP會話?您如何開始PHP會話?May 02, 2025 am 12:16 AM

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

什麼是會話再生,如何提高安全性?什麼是會話再生,如何提高安全性?May 02, 2025 am 12:15 AM

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

使用PHP會話時有哪些性能考慮?使用PHP會話時有哪些性能考慮?May 02, 2025 am 12:11 AM

PHP会话对应用性能有显著影响。优化方法包括:1.使用数据库存储会话数据,提升响应速度;2.减少会话数据使用,只存储必要信息;3.采用非阻塞会话处理器,提高并发能力;4.调整会话过期时间,平衡用户体验和服务器负担;5.使用持久会话,减少数据读写次数。

PHP會話與Cookie有何不同?PHP會話與Cookie有何不同?May 02, 2025 am 12:03 AM

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

PHP如何識別用戶的會話?PHP如何識別用戶的會話?May 01, 2025 am 12:23 AM

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

確保PHP會議的一些最佳實踐是什麼?確保PHP會議的一些最佳實踐是什麼?May 01, 2025 am 12:22 AM

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

PHP會話文件默認存儲在哪裡?PHP會話文件默認存儲在哪裡?May 01, 2025 am 12:15 AM

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

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

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具