HTTP協議的發展過程

前言

HTTP協議是一種用于在網絡上傳輸信息的應用層協議,它為萬維網的運作提供了基礎。
最早的版本是HTTP/0.9,它是HTTP協議的第一個版本,誕生于1991年,其設計初衷是為了在計算機之間傳輸簡單的超文本文檔,即HTML。
在HTTP2之前,HTTP一直都是基于文本的協議,足夠的簡單、良好的可讀性是HTTP協議能取得如此成功的重要原因之一。
然而,隨著互聯網的發展和網頁內容的復雜性增加,基于文本的HTTP協議逐漸暴露出一些性能上的限制。為了解決這些問題,才有了HTTP2。

HTTP協議

版本發布年份主要特點
HTTP 0.91991年最初版本,用于傳輸超文本(HTML)文檔
HTTP 1.01996年支持多種類型的數據和HTTP頭部
HTTP 1.11997年長連接、管道化、緩存機制,提高了性能和效率
HTTP/22015年二進制協議、多路復用、頭部壓縮、服務器推送、流量控制

HTTP/0.9

HTTP/0.9是最早的HTTP協議版本,于1991年發布。它非常簡單,典型的請求-響應模型,沒有定義任何HTTP頭部信息,只支持傳輸HTML。它的主要特點如下:

  • 只支持GET
  • 無HTTP頭部
  • 純文本協議

請求示例:

GET /index.html

響應示例:

<html><body>content</body>
</html>

HTTP/1.0

HTTP/1.0是HTTP協議的一個重要版本,于1996年發布。
HTTP/1.0相對于HTTP/0.9,增加了以下內容和特性:

  1. 新增POST、HEAD請求方法
  2. 引入請求頭信息
  3. 引入響應狀態碼,如:200表示成功

請求示例:

GET /path/file.html HTTP/1.0
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0

響應示例:

HTTP/1.0 200 OK
Date: Fri, 08 Jul 2023 18:30:00 GMT
Server: Apache/2.4.7 (Ubuntu)
Content-Length: 256
Content-Type: text/html<html>
<body>...
</body>
</html>

HTTP/1.1

HTTP/1.1相對于HTTP/1.0,增加了以下內容和特性:

  1. 持久連接:HTTP/1.1默認使用持久連接,即在單個TCP連接上可以發送多個請求和獲得多個響應。這樣可以減少建立和關閉連接的開銷,提高性能。
  2. 管道化:在一個連接上可以同時發送多個請求,而無需等待每個請求的響應。服務器也可以按照請求的順序回復響應,進一步提高了性能。
  3. 分塊傳輸編碼:允許服務器將響應分成多個部分進行傳輸,這對于傳輸大文件或者流式數據非常有用。
  4. Host頭部:允許在一個物理服務器上托管多個域名或多個虛擬主機,服務器根據不同的 Host 頭部字段來選擇不同的網站或虛擬主機進行請求處理。

HTTP2

為什么命名不是HTTP/1.2?因為HTTP2協議關于數據傳輸的部分改動很大,從一個基于文本的協議升級到了二進制協議,屬于是大版本的升級。
相較于HTTP/1.1,HTTP2的特點是:

  • 二進制分幀消息:從一個文本協議升級到了二進制協議,HTTP2把消息切分成多個二進制幀Frame發送,為了區分不同的消息,幀有很多類型,例如傳輸請求頭的HEADERS幀,傳輸消息體的DATA幀等。
  • 多路復用:HTTP2在單個連接上可以同時開辟多個邏輯上的流Stream,消息是基于Stream發送的,意味著請求和響應可以并發處理。
  • 頭部壓縮:之前是消息體可以壓縮,在HTTP2上,消息頭也支持壓縮了。
  • 服務端推送:不止是客戶端請求服務端,現在服務端也可以主動推送數據給客戶端了。
  • 流量控制:HTTP1因為在單個連接上,請求-響應都是串行的,因此直接依賴于底層TCP的流控就好了。HTTP2有了多路復用,單個連接上可以同時有多個Stream,此時必須要實現更精細化的流量控制。

HTTP2會把消息拆分成多個Frame發送,這些Frame是基于二進制傳輸的,無法直接拆看,必須使用對應的工具或三方庫來處理這些Frame。
關于HTTP2的各種Frame的格式,以及其它介紹,可以查看這篇文檔:https://httpwg.org/specs/rfc9113.html#FrameTypes

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36345.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36345.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36345.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在Java中對XML的簡單應用

XML 數據傳輸格式1 XML 概述1.1 什么是 XML1.2 XML 與 HTML 的主要差異1.3 XML 不是對 HTML 的替代 2 XML 語法2.1 基本語法2.2 快速入門2.3 組成部分2.3.1 文檔聲明格式屬性 2.3.2 指令&#xff08;了解&#xff09;&#xff1a;結合CSS2.3.3 元素2.3.4 屬性**XML 元素 vs. 屬…

【Linux】Linux中獲取UUID的方法

1、從mmc塊設備獲取 在Linux下,獲取MMC的CID(Card Identification,識別ID) cat /sys/block/mmcblk0/device/cidMMC CID組成 MID: [127:120] —— 8bit(1Byte)Manufacturer ID,由MMCA分配,比如Sandisk為0x02,Kingston為0x37,Samsung為0x15。OID: [119:104] —— 16b…

windows程序基礎

一、windows程序基礎 1. Windows程序的特點 1&#xff09;用戶界面統一、友好 2&#xff09;支持多任務:允許用戶同時運行多個應用程序(窗口) 3&#xff09;獨立于設備的圖形操作 使用圖形設備接口( GDI, Graphics Device Interface )屏蔽了不同硬件設備的差異&#…

什么是視頻的編碼和解碼

這段描述中&#xff0c;視頻解碼能力和視頻編碼能力指的是不同的處理過程。視頻解碼是將壓縮過的視頻數據解開并還原為可播放的視頻流&#xff0c;而視頻編碼是將原始視頻數據壓縮成更小的尺寸&#xff0c;以減少存儲空間和傳輸帶寬。在這個上下文中&#xff0c;解碼能力和編碼…

LVGL學習筆記 30 - List(列表)

目錄 1. 添加文本 2. 添加按鈕 3. 事件 4. 修改樣式 4.1 背景色 4.2 改變項的顏色 列表是一個垂直布局的矩形&#xff0c;可以向其中添加按鈕和文本。 lv_obj_t* list1 lv_list_create(lv_scr_act());lv_obj_set_size(list1, 180, 220);lv_obj_center(list1); 部件包含&…

Android:換膚框架Android-Skin-Support

gihub地址&#xff1a;https://github.com/ximsfei/Android-skin-support 樣例&#xff1a; 默認&#xff1a; 更換后&#xff1a; 一、引入依賴&#xff1a; // -- 換膚依賴implementation skin.support:skin-support:4.0.5// skin-supportimplementation skin.support:ski…

Rust語法:變量,函數,控制流,struct

文章目錄 變量可變與不可變變量變量與常量變量的Shadowing標量類型整數 復合類型 函數控制流if elseloop & whilefor in structstruct的定義Tuple Structstruct的方法與函數 變量 可變與不可變變量 Rust中使用let來聲明變量&#xff0c;但是let聲明的是不可變變量&#x…

Golang自定義類型與類型別名

type myInt int32 與 type myInt int32&#xff0c;概念并不相同 自定義類型&#xff1a;type myInt int32 通過這種方式定義的類型是一個全新的類型&#xff0c;這個新類型與int32有相同的底層結構&#xff0c;但是卻與int32類型不兼容。 type myInt int32var a int32 5 var…

雙色球彩票系統---(java實現)

雙色球彩票系統&#xff1a;需求&#xff1a;投注號碼由6個紅色號碼和1個藍色球號碼組成。紅色球號碼從1-33中選擇&#xff0c;藍色球號碼從1-16當中選擇 * 紅 藍 * 一等獎 6 1 * 二等獎 6 0 * 三等獎 5 1 * 四等獎 5 0 * 4 1 * 五等獎 4 0 * …

Blazor簡單教程(1.1):Razor基礎語法

文章目錄 前言基本文件配置引入Layout組件 語法介紹pagecodeRazor 語法[ 顯式表達和隱式表達](https://learn.microsoft.com/zh-cn/aspnet/core/mvc/views/razor?viewaspnetcore-7.0#explicit-razor-expressions) 綁定簡單綁定雙向綁定帶參數的函數綁定 依賴注入 前言 Blazor…

synchronized使用

目錄 問題描述 1 鎖方法 2 鎖代碼塊 3 鎖某個類 4 靜態方法上的synchronized 當我們處理多線程處理同步問題的時候就會用到synchronized這個關鍵字&#xff0c;下面介紹下synchronized的四種用法。 問題描述 介紹之前我們先來看下&#xff0c;在java 多線程中 如果沒有線…

leetcode1. 兩數之和

題目&#xff1a;leetcode1. 兩數之和 描述&#xff1a; 給定一個整數數組 nums 和一個整數目標值 target&#xff0c;請你在該數組中找出 和為目標值 target 的那 兩個 整數&#xff0c;并返回它們的數組下標。 你可以假設每種輸入只會對應一個答案。但是&#xff0c;數組中…

QT:UI控件(按設計師界面導航界面排序)

基礎部分 創建新項目&#xff1a;QWidget&#xff0c;QMainWindow&#xff0c;QDialog QMainWindow繼承自QWidget&#xff0c;多了菜單欄; QDialog繼承自QWidget&#xff0c;多了對話框 QMainWindow 菜單欄和工具欄&#xff1a; Bar: 菜單欄&#xff1a;QMenuBar&#xff0…

A Survey for In-context Learning

A Survey for In-context Learning 摘要&#xff1a; 隨著大語言模型(LLMs)能力的增長&#xff0c;上下文學習(ICL)已經成為一個NLP新的范式&#xff0c;因為LLMs僅基于幾個訓練樣本讓內容本身增強。現在已經成為一個新的趨勢去探索ICL來評價和extrapolate LLMs的能力。在這篇…

微服務06-分布式事務解決方案Seata

1、Seata 概述 Seata事務管理中有三個重要的角色: TC (Transaction Coordinator) - **事務協調者:**維護全局和分支事務的狀態,協調全局事務提交或回滾。 TM (Transaction Manager) - **事務管理器:**定義全局事務的范圍、開始全局事務、提交或回滾全局事務。 RM (Resourc…

Java地圖專題課 基本API BMapGLLib 地圖找房案例 MongoDB

本課程基于百度地圖技術&#xff0c;由基礎入門開始到應用實戰&#xff0c;適合零基礎入門學習。將企業項目中地圖相關常見應用場景的落地實戰&#xff0c;包括有地圖找房、輕騎小程序、金運物流等。同時講了基于Netty實現高性能的web服務&#xff0c;來處理高并發的問題。還講…

ttf-dejavu fontconfig字體

ttf-dejavu fontconfig是驗證碼&#xff0c;pdf&#xff0c;excel時需要用到的字體 編輯dockerfile&#xff0c;先切換國內鏡像源&#xff0c;默認alpinelinux是國外源&#xff0c;下載包會很慢 vim Dockerfile FROM alpine:latest RUN sed -i s/dl-cdn.alpinelinux.org/mirr…

【創建型設計模式】C#設計模式之原型模式

原型模式是一種創建型設計模式&#xff0c;它通過復制現有對象來創建新對象&#xff0c;而無需通過實例化的方式。它允許我們使用已經存在的對象作為藍本&#xff0c;從而創建新的對象&#xff0c;這樣可以避免重復初始化相似的對象&#xff0c;提高了對象的創建效率。 現在給…

Sentinel

1、熔斷降級限流 熔斷 A服務調用B服務的某個功能&#xff0c;由于網絡不穩定、B服務卡機等問題&#xff0c;導致功能時間超長。如果這樣子的次數太多&#xff0c;我們就可以直接將B斷路&#xff08;A不再請求B接口&#xff09;&#xff0c;凡是調用B服務的直接返回降級數據&a…

13-數據結構-串以及KMP算法,next數組

串 目錄 串 一、串&#xff1a; 二、串的存儲結構&#xff1a; 三、模式匹配 1.簡單模式匹配&#xff08;BF算法&#xff09; 2.KMP算法 2.1-next&#xff08;j&#xff09;數組手工求解 2.2-nextval&#xff08;j&#xff09;數組手工求解 一、串&#xff1a; 內容受…