Http協議中關於Content-Length的解讀

来源:http://www.cnblogs.com/zhenghongxin/archive/2016/02/24/5212682.html
-Advertisement-
Play Games

在HTTP協議中,有Content-Length的詳細解讀。Content-Length用於描述HTTP消息實體的傳輸長度the transfer-length of the message-body。在HTTP協議中,消息實體長度和消息實體的傳輸長度是有區別,比如說gzip壓縮下,消息實體長度是壓


在HTTP協議中,有Content-Length的詳細解讀。Content-Length用於描述HTTP消息實體的傳輸長度the transfer-length of the message-body。在HTTP協議中,消息實體長度和消息實體的傳輸長度是有區別,比如說gzip壓縮下,消息實體長度是壓縮前的長度,消息實體 的傳輸長度是gzip壓縮後的長度。

  在具體的HTTP交互中,客戶端是如何獲取消息長度的呢,主要基於以下幾個規則:

  響應為1xx,204,304相應或者head請求,則直接忽視掉消息實體內容。

  如果有Transfer-Encoding,則優先採用Transfer-Encoding裡面的方法來找到對應的長度。比如說Chunked模式。

  “如果head中有Content-Length,那麼這個Content-Length既表示實體長度,又表示傳輸長度。如果實體長度和傳輸 長度不相等(比如說設置了Transfer-Encoding),那麼則不能設置Content-Length。如果設置了Transfer- Encoding,那麼Content-Length將被忽視”。這句話翻譯的優點饒,其實關鍵就一點:有了Transfer-Encoding,則不能 有Content-Length。

  Range傳輸。不關註,沒詳細看了:)

  通過伺服器關閉連接能確定消息的傳輸長度。(請求端不能通過關閉連接來指明請求消息體的結束,因為這樣可以讓伺服器沒有機會繼續給予響應)。這種情況主要對應為短連接,即非keep-alive模式。

  HTTP1.1必須支持chunk模式。因為當不確定消息長度的時候,可以通過chunk機制來處理這種情況。

  在包含消息內容的header中,如果有content-length欄位,那麼該欄位對應的值必須完全和消息主題裡面的長度匹配。

  “The entity-length of a message is the length of the message-body before any transfer-codings have been applied”

  也就是有chunk就不能有content-length 。

  其實後面幾條幾乎可以忽視,簡單總結後如下:

  1、Content-Length如果存在並且有效的話,則必須和消息內容的傳輸長度完全一致。(經過測試,如果過短則會截斷,過長則會導致超時。)

  2、如果存在Transfer-Encoding(重點是chunked),則在header中不能有Content-Length,有也會被忽視。

  3、如果採用短連接,則直接可以通過伺服器關閉連接來確定消息的傳輸長度。(這個很容易懂)

  結合HTTP協議其他的特點,比如說Http1.1之前的不支持keep alive。那麼可以得出以下結論:

  1、在Http 1.0及之前版本中,content-length欄位可有可無。

  2、在http1.1及之後版本。如果是keep alive,則content-length和chunk必然是二選一。若是非keep alive,則和http1.0一樣。content-length可有可無。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本節目錄 介紹模塊 生命周期事件 PreInitialize Initialize PostInitialize Shutdown 模塊依賴 自定義模塊方法 介紹模塊 ABP提供基礎設施讓我們創建application,就是創建和組合使用modules. 1個module可以依賴其他的module,
  • 本文只是簡單得實現一下事務的小例子,事務的具體內容,比如事務的等級,事務的具體實現原理等等。。。 菜鳥水平有限,暫時還更不了這個,以後的博客可能會涉及。 如果您看完本博客之後能簡單的實現一個事務,本文目的就達到了。
  • 定義 原型模式:用原型實例指定創建對象的種類,並且通過複製這些原型創建新的對象。 從定義來看,我覺得最重要的一個詞就是 複製 ,所謂原型模式,你可以把它理解成對象的複製粘貼. 適用於比較複雜的對象,比如說你new一個對象,要傳十個參數(A a =new A(1,2,3,4,5,6,7,8,9,0))
  • 一種方法為: function test(str){ var iNum = str.length % 3; var prev = ''; var iNow = 0; var temp = ''; var arr = []; if (iNum != 0){ prev = str.substring(0...
  • 面向對象語言中的對象 老是能聽到什麼基於對象, 面向對象. 什麼是對象, 如果有面向對象基礎的人可以無視了, 下麵舉個簡單的例子給大家講講面向對象中, 對象的定義, 這個是比較通用的, 不過對於JS來說不太一樣, 但是理解總是好的. 首先, 先有類型(Class), 這個類是指具有本質相同的一類事物
  • 在我們使用H5 storage之前,先瞭解一下storage的介紹吧: Storage模塊管理應用本地數據存儲,用於應用數據的保存和讀取,應用本地數據localStorage,sessionStorage的區別在於數據的有效域不同,前者可在應用內跨域操作,數據存儲期是持久化的,並且沒有容量的限制,通
  • 一、前言 說起Iconfont,對大多數人來說可能不是什麼新的技術了,現在好多大網站已經開始使用Iconfont。博主今天主要是簡單說一下它的使用方法,聊聊使用它時可能遇到哪些坑,不熟悉的同學可以簡要看一下,資深瞭解的同學,如果發現問題,還請指正。 二、什麼是Iconfont 有的同學可能會問什麼是
  • 一、animates.css animate.css是來自dropbox的工程師Daniel Eden開發的一款CSS3的動畫效果小類庫。包含了60多款不同類型的CSS3動畫,包括:晃動,閃動,各種淡出淡出效果,如果你想快速的整合各種CSS3動畫特效的話,使用它即可方便的實現。 查看演示: http
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...