HTTP 1.1 比 HTTP1.0 多了什么?(詳盡版)

相較于HTTP 1.0,1.1 版本增加了以上特性:

1. 新增了連接管理即 keepalive,允許持久連接。

定義:

Keepalive允許客戶端和服務器在完成一次請求-響應后,保持連接處于打開狀態,以便后續請求復用同一連接,而無需重新建立連接。

工作原理:

  1. 客戶端通過TCP三次握手與服務器建立連接。
  2. 客戶端發送HTTP請求,服務器處理后返回響應。
  3. 服務器不會立即關閉連接,而是保持空閑狀態,等待后續請求。
  4. 如果客戶端在預設時間內發送新的請求,服務器將復用此連接。
  5. 超過空閑時間后,服務器會關閉連接以節省資源。

優勢:

  1. 減少連接開銷: 避免了頻繁的TCP連接建立和關閉,節省時間和帶寬。
  2. 提升性能: 特別適用于需要多個小請求的場景,如加載多張圖片或腳本。

2. 支持pipeline,無需等待前面的請求響應,即可發送第二次請求。

定義:

Pipeline允許客戶端在一個連接中連續發送多個HTTP請求,而無需等待前一個響應。

工作原理:

  1. 客戶端在同一個連接中發送多個請求。
  2. 服務器按順序處理請求,并依次返回響應。
  3. 客戶端在發送完所有請求后,等待服務器按順序返回響應。

優勢:

  • 減少延遲: 減少等待時間,尤其在高延遲網絡中效果顯著。
  • 提高吞吐量: 客戶端可以并行發送請求,提高整體傳輸效率。

注意事項:

  • 服務器處理順序: 響應必須按請求順序返回,服務器無法重新排序。
  • 潛在問題: 管道中的任何一個請求失敗可能導致后續請求處理延遲或失敗。

3. 支持分塊傳輸編碼(Chunked Transfer Coding)

在HTTP協議中允許服務器將響應分成多個塊發送,而無需提前知道內容的總長度。這在處理大型文件時特別有用,因為它提高了傳輸效率,減少了客戶端等待時間。

以下是一個簡明的示例:客戶端請求從服務器下載一個10GB的視頻文件。

傳統方法(無分塊傳輸):

  1. 客戶端發送HTTP GET請求到服務器。
  2. 服務器處理請求,開始讀取視頻文件。
  3. 服務器計算整個文件的大小,并在響應頭中設置Content-Length: 10737418240(10GB)。
  4. 服務器將整個文件一次性發送給客戶端。
  5. 客戶端等待接收完整個文件后,才能開始播放。

分塊傳輸方法:

  1. 客戶端發送HTTP GET請求,支持接受分塊傳輸。
  2. 服務器開始處理請求,并將視頻文件分割成多個塊(例如,每塊1MB)。
  3. 服務器在響應頭中設置Transfer-Encoding: chunked,指示使用分塊傳輸,不設置Content-Length。
  4. 服務器開始發送第一個塊,包含塊的大小(以十六進制表示)和塊數據。
  5. 客戶端接收到每個塊后,立即開始處理(如播放視頻),無需等待所有塊傳輸完成。
  6. 服務器發送完最后一個塊后,發送一個0大小的塊,表示傳輸結束(EOF)。
  7. 客戶端完成接收,處理完成。

優點:

客戶端可以邊下載邊處理,提升用戶體驗。
服務器無需預先計算總長度,減少延遲。
節省內存,適用于大數據傳輸。

總結:

分塊傳輸編碼在處理大文件時顯著提升了效率,減少了等待時間,適用于流媒體、大型文件下載等場景。

4. 新增緩存的控制和管理。

HTTP/1.1中,緩存控制和管理主要通過以下機制實現:

1. Cache-Control頭部(用于控制緩存行為,如緩存有效期、緩存范圍等。)

  • max-age=[seconds]:指定資源在緩存中的有效時間。
  • s-maxage=[seconds]:針對共享緩存(如CDN)的有效時間
  • no-cache:強制每次請求都驗證資源是否過期。
  • no-store:禁止緩存任何內容。
  • public和private:分別允許或限制第三方緩存。

2. ETag頭部(提供資源的唯一標識,用于驗證資源是否更改。)

  • 工作原理:當客戶端再次請求資源時,會發送If-None-Match頭部,服務器通過ETag判斷資源是否過期,若未變化則返回304狀態碼。

3. Last-Modified頭部(指示資源的最后修改時間。)

  • 工作原理:客戶端在請求中包含If-Modified-Since頭部,服務器比較時間戳,若資源未更改則返回304狀態碼。

4. 緩存驗證機制

  • 強緩存:直接使用緩存內容,無需服務器驗證。
  • 協商緩存:客戶端攜帶緩存驗證信息(如ETag或Last-Modified),服務器確認資源是否過期后,決定是否返回新內容。

5. 緩存有效期管理

  • 過期時間:通過Cache-Control設置資源的緩存時長,過期后客戶端會重新請求資源。
  • 服務器處理:服務器在接收到過期緩存請求時,會重新生成響應,確保客戶端獲得最新內容。

6. 緩存控制策略

  • 合理設置緩存時間:根據資源更新頻率,設置適當的max-age值,平衡緩存和更新需求。
  • 使用ETag提升效率:避免頻繁的全響應,通過ETag快速判斷資源是否變化。
  • 靈活運用Cache-Control指令:根據資源類型(如公開或私有)選擇合適的緩存策略。

通過以上機制,HTTP/1.1有效地管理了緩存,提升了資源加載速度,減少了服務器負載。合理配置這些頭部和機制,可以顯著優化網站性能和用戶體驗。

5. 加入host頭

在HTTP/1.1協議中,Host頭字段的作用非常重要,主要體現在以下幾個方面:

標識目標服務器:

Host頭字段指定了請求的目標服務器的域名和端口號(如果端口號非默認)。例如,Host: www.example.com表示請求的目標是www.example.com服務器。這使得服務器能夠根據域名確定請求的來源,特別是在虛擬主機環境中,多個網站可以共享同一個IP地址,但通過不同的Host頭來區分不同的域名。

支持虛擬主機:

通過Host頭,服務器可以托管多個網站,每個網站使用不同的域名。當一個請求到達服務器時,服務器會解析Host頭,從而確定應該將請求路由到哪個虛擬主機上,提供相應的資源。這極大提高了服務器資源的利用率。

路由和定位資源:

服務器根據Host頭來確定請求的目標資源。這有助于服務器正確地路由請求,確保請求能夠到達正確的應用程序或服務。例如,一個服務器可能托管多個應用程序,每個應用程序對應不同的域名,通過Host頭可以實現精準的路由。

安全性:

Host頭還用于防止某些類型的攻擊,如HTTP頭注入攻擊。通過驗證Host頭的值,服務器可以確保請求的來源是合法的,從而增強安全性。

區分大小寫:

雖然域名通常以小寫顯示,但Host頭是區分大小寫的。理論上,不同的大小寫可能指向不同的資源,但大多數情況下,服務器會將大小寫視為不敏感。

不包含路徑信息:

Host頭只包含域名和端口號,不包含請求的路徑信息。路徑信息在URI中指定,Host頭的作用是明確請求的目標服務器,而路徑則用于定位具體資源。

總結:

Host頭在HTTP/1.1中起到了至關重要的作用,它不僅幫助服務器識別請求的目標,還支持虛擬主機的實現,提高資源利用率,同時增強安全性。正確配置和使用Host頭是確保HTTP通信正常進行的關鍵。

6. 名詞解釋

EOF:End of File,這是一個關鍵的信號,用于指示文件傳輸的結束。

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

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

相關文章

【深度學習】PyTorch實現VGG16模型及網絡層數學原理

一、Demo概述 代碼已附在文末 1.1 代碼功能 ? 實現VGG16網絡結構? 在CIFAR10數據集上訓練分類模型 1.2 環境配置 詳見【深度學習】Windows系統Anaconda CUDA cuDNN Pytorch環境配置 二、各網絡層概念 2.1 卷積層(nn.Conv2d) nn.Conv2d(in_cha…

解決RecyclerView在調用smoothScrollToPosition后最后一個item底部超出屏幕的問題

要解決RecyclerView在調用smoothScrollToPosition后最后一個item底部超出屏幕的問題,可以使用自定義的LinearSmoothScroller,使其底部對齊屏幕。步驟如下: 創建自定義的SmoothScroller類: 繼承LinearSmoothScroller并重寫getVerti…

k8s親和力和非親和力

在 Kubernetes 中,親和力(Affinity)和非親和力(Anti-Affinity)是用于控制 Pod 調度策略的機制,它們可以幫助優化資源利用率、提高應用性能和可用性。以下是親和力和非親和力的詳細解釋: 親和力…

開發一款游戲需要哪些崗位角色參與?

常見分類 1. 游戲策劃(Game Designer) 核心職責:設計游戲的玩法、規則、內容和整體體驗。 具體工作: 系統設計:設計游戲的戰斗、經濟、成長、社交等核心系統。 數值設計:平衡角色屬性、裝備數值、經濟系…

Asp.NET Core WebApi 創建帶鑒權機制的Api

構建一個包含 JWT(JSON Web Token)鑒權的 Web API 是一種常見的做法,用于保護 API 端點并驗證用戶身份。以下是一個基于 ASP.NET Core 的完整示例,展示如何實現 JWT 鑒權。 1. 創建 ASP.NET Core Web API 項目 使用 .NET CLI 或 …

Jenkins 發送釘釘消息

這里不介紹 Jenkins 的安裝,可以網上找到很多安裝教程,重點介紹如何集成釘釘消息。 需要提前準備釘釘機器人的 webhook 地址。(網上找下,很多教程) 下面開始配置釘釘機器人,登錄 Jenkins,下載 …

CentOS中離線安裝DockerCompos并用其部署Rabbitmq(使用離線導入導出docker鏡像方式)

場景 DockerDockerCompose實現部署jenkins,并實現jenkinsfile打包SpringBootVue流水線項目過程詳解、踩坑記錄(附鏡像資源、離線包資源下載): DockerDockerCompose實現部署jenkins,并實現jenkinsfile打包SpringBootVue流水線項目過程詳解、踩坑記錄(附鏡像資源、離…

stm32week11

stm32學習 八.stm32基礎 2.stm32內核和芯片 F1系統架構:4個主動單元和4個被動單元 AHB是內核高性能總線,APB是外圍總線 總線矩陣將總線和各個主動被動單元連到一起 ICode總線直接連接Flash接口,不需要經過總線矩陣 AHB:72MHz&am…

貪心算法:部分背包問題深度解析

簡介: 該Java代碼基于貪心算法實現了分數背包問題的求解,核心通過單位價值降序排序和分階段裝入策略實現最優解。首先對Product數組執行雙重循環冒泡排序,按wm(價值/重量比)從高到低重新排列物品;隨后分兩階段裝入:循環…

13. Langchain異步處理:提升應用性能的關鍵技巧

引言:從"順序等待"到"并行加速" 2025年某電商平臺引入LangChain異步處理后,大促期間訂單處理能力提升5倍,系統響應延遲降低70%。本文將基于LangChain的異步架構,詳解如何通過并行執行流式處理,讓…

ros2-rviz2控制unity仿真的6關節機械臂,探索從仿真到實際應用的過程

文章目錄 前言(Introduction)搭建開發環境(Setup Development Environment)在window中安裝Unity(Install Unity in window)創建Docker容器,并安裝相關軟件(Create Docker containers…

計算機組成原理筆記(十四)——3.4指令類型

一臺計算機的指令系統可以有上百條指令,這些指令按其功能可以分成幾種類型,下面分別介紹。 3.4.1數據傳送類指令 一、核心概念與功能定位 數據傳送類指令是計算機指令系統中最基礎的指令類型,負責在 寄存器、主存、I/O設備 之間高效復制數…

各開源協議一覽

在 GitHub 上,開源項目通常會使用一些常見的開源協議來定義項目的使用、修改和分發規則。以下是目前 GitHub 上最常見的幾種開源協議及其差異和示例說明: TL;DR 協議寬松程度是否強制開源專利保護適用場景MIT最寬松否無希望代碼被廣泛使用Apache 2.0寬松…

51c自動駕駛~合集17

我自己的原文哦~ https://blog.51cto.com/whaosoft/13793157 #匯聚感知、定位、規劃控制的自動駕駛系統 自動駕駛技術在應用到車輛上之后可以通過提高吞吐量來緩解道路擁堵,通過消除人為錯誤來提高道路安全性,并減輕駕駛員的駕駛負擔,從…

小程序開發指南

小程序開發指南 目錄 1. 小程序開發概述 1.1 什么是小程序1.2 小程序的優勢1.3 小程序的發展歷程 2. 開發準備工作 2.1 選擇開發平臺2.2 開發環境搭建2.3 開發模式選擇 3. 小程序開發流程 3.1 項目規劃3.2 界面設計3.3 代碼開發3.4 基本開發示例3.5 數據存儲3.6 網絡請求3.7 …

Day15:關于MySQL的編程技術——基礎知識

前言:先創建一個練習的數據庫和數據 1.創建數據庫并創建數據表的基本結構 -- 創建練習數據庫 CREATE DATABASE db_programming; USE db_programming;-- 創建員工表(包含各種數據類型) CREATE TABLE employees (emp_id INT PRIMARY KEY AUTO…

批處理腳本bat丨遍歷一個包含項目名稱的數組,并對每個文件中的項目執行 git pull 操作 (一鍵拉很多文件的代碼)

文章目錄 前言一、操作方式二、文件展示三、分析代碼結構四、代碼五、需要注意的潛在問題六、改進后的代碼七、改進說明八、感謝 前言 由于之前git服務部署在本地服務器,處于代碼安全角度考慮。領導讓我將所有的項目代碼手動物理備份一份并且發給他。 這種傻傻的操…

【C++】C與C++、C++內存空間、堆與棧

C嘎嘎嘎嘎嘎~ C與C的區別與聯系 C內存空間 int global_var; // 未初始化全局變量,BSS段 const char* str "Hello"; // 字符串常量text段 in數據段void func() {static int static_var; // 未初始化的靜態變量,數據段int local_var; …

舵機:機器人領域的“關節革命者”

機器人的技術,每一個細微的進步都可能引領一場行業變革。而在這場變革中,舵機作為機器人關節的核心部件,正悄然上演著一場革命性的應用風暴。從簡單的關節運動到復雜的姿態控制,舵機以其卓越的性能和無限的可能,重新定…

微前端的不斷探索之路—— qiankun 實戰與思考!

全文目錄: 開篇語📝 前言🛠? 微前端是什么?為什么需要它?💡 先從“前端痛點”說起🧐 微前端的優勢 🤹?♀? qiankun 簡介與核心概念🌟 為什么選擇 qiankun?…