日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

http下载异常_用了这么久HTTP, 你是否了解Content-Length?

發布時間:2023/12/16 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 http下载异常_用了这么久HTTP, 你是否了解Content-Length? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要: 理解HTTP協議...

  • 原文:用了這么久HTTP, 你是否了解Content-Length和Transfer-Encoding ?
  • 作者:樸瑞卿的博客
由Content-Length導致的問題引發的一系列思考: 前段時間開發API網關, 使用postman調試時出現了超時的情況, 經排查確定是請求數據被處理后Content-Length與實際不一致導致的問題, 故有此文.

Content-Length, HTTP消息長度, 用十進制數字表示的八位字節的數目. 一般情況下, 很多工作都被框架完成, 我們很少去關注這部分內容, 但少數情況下發生了Content-Length與實際消息長度不一致, 程序可能會發生比較奇怪的異常, 如:

  • 無響應直到超時.
  • 請求被截斷, 而且下一個請求解析出現錯亂.

Content-Length是HTTP消息長度, 用十進制數字表示的八位字節的數目, 是Headers中常見的一個字段. Content-Length應該是精確的, 否則就會導致異常 (特別地, HTTP1.0中這個字段可有可無).

Content-Length首部指示出報文中實體主體的字節大小. 這個大小是包含了所有內容編碼的, 比如, 對文本文件進行了gzip壓縮的話, Content-Length首部指的就是壓縮后的大小而不是原始大小.

Content-Length是如何工作的

Content-Length使用十進制的數字表示了消息的長度, 服務端/客戶端通過它來得知后續要讀取消息的長度.

如果這個長度不正確, 會發生如下情況:

Content-Length > 實際長度

如果Content-Length比實際的長度大, 服務端/客戶端讀取到消息結尾后, 會等待下一個字節, 自然會無響應直到超時.

同樣地, 在響應消息中Content-Length超過實際長度也是一樣的效果:

Content-Length < 實際長度

如果這個長度小于實際長度, 首次請求的消息會被截取, 比如參數為param=piaoruiqing, Content-Length為10, 那么這次請求的消息會被截取為: param=piao, 如圖所示:

但, 僅僅是如此嗎, 當然不, 我們再來看看第二次請求會發生什么讓人意外的事情, 如圖:

連續的兩次請求, 第一次消息被截斷, 而第二次沒有發生預期的截斷, 而是服務端拋出了異常: Request method 'ruiqingPOST' not supported.刺不刺激 (ノ)゚Д゚( )

那 ruiqingPOST是個什么神仙方法??? 此時, 憑著多年開發(DEBUG)經驗練就的敏感度, 我們大致可以猜出, 上一次請求被截取剩下的消息, 在這次請求出現了. 掏出wireshark來驗證一下, 如圖:

導致這種情況的原因就是開啟了Connection:keep-alive, 如果使用Connection:close, 所產生的現象就是每一次的請求都被截斷, 但不會產生解析混亂(如將上一次剩下的消息拼接到后續的請求消息中).

不確定Content-Length的值怎么辦

Content-Length首部指示出報文中實體主體的字節大小. 但如在請求處理完成前無法獲取消息長度, 我們就無法明確指定Content-Length, 此時應該使用Transfer-Encoding: chunked

什么是Transfer-Encoding: chunked

數據以一系列分塊的形式進行發送. Content-Length 首部在這種情況下不被發送. 在每一個分塊的開頭需要添加當前分塊的長度, 以十六進制的形式表示,后面緊跟著 rn , 之后是分塊本身, 后面也是rn. 終止塊是一個常規的分塊, 不同之處在于其長度為0.

Transfer-Encoding: chunked是如何工作的

接下來我們用一個下載文件的例子, 來探討Transfer-Encoding: chunked是如何工作的. 服務端代碼如下:

使用postman發起請求, wireshark抓包查看, 如圖:

在wireshark中可以很清晰地看到chunked的數據, 其結構大致是: 返回的消息被分為多個數據塊, 每個數據塊有兩部分, 長度 + 數據, 這兩部分都以CRLF(即rn)結尾. 而終止塊是一個特殊的數據塊, 其長度為0, 如圖:

如此, 即完成了分塊編碼. 其主要應用于如下場景, 即要傳輸大量的數據, 但是在請求在沒有被處理完之前響應的長度是無法獲得的. 例如, 當需要用從數據庫中查詢獲得的數據生成一個大的HTML表格、需要傳輸大量的圖片等.

  • Content-Length如果存在且生效, 必須是正確的, 否則會發生異常.(大于實際值會超時, 小于實際值會截斷并可能導致后續的數據解析混亂)
  • 如果報文中包含Transfer-Encoding: chunked首部, 那么Content-Length將被忽略.

參考

  • https://developer.mozilla.org
  • 《HTTP權威指南》

版權聲明

本文發布于樸瑞卿的博客, 允許非商業用途轉載, 但轉載必須保留原作者樸瑞卿 及鏈接:https://blog.piaoruiqing.com. 如有授權方面的協商或合作, 請聯系郵箱: piaoruiqing@gmail.com.

關于Fundebug

Fundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java線上應用實時BUG監控。 自從2016年雙十一正式上線,Fundebug累計處理了20億+錯誤事件,付費客戶有陽光保險、核桃編程、荔枝FM、掌門1對1、微脈、青團社等眾多品牌企業。歡迎大家免費試用!

總結

以上是生活随笔為你收集整理的http下载异常_用了这么久HTTP, 你是否了解Content-Length?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕一区二区av | 91在线看视频 | 先锋成人 | 青草视频在线播放 | 国产艳情片| 床上激情网站 | 夜夜嗨av一区二区三区免费区 | 强行糟蹋人妻hd中文字幕 | 亚洲精品乱码久久 | 波多野结衣一区二区三区在线 | 日本泡妞xxxx免费视频软件 | 日韩亚洲欧美在线 | 久久久久久草 | 激情小说av | 少妇熟女一区二区三区 | 午夜精品电影 | 成年人国产精品 | 电车痴汉在线观看 | 欧洲精品久久久久毛片完整版 | 日韩最新中文字幕 | 成人毛片软件 | 噜噜噜久久| 日韩av资源在线观看 | 三级理伦 | 国产一区二区三区四区五区美女 | 黄色在线免费 | av怡红院| 全部免费毛片在线播放 | 靠逼在线观看 | 成人黄色电影网址 | 色妞在线 | 日韩视频在线免费播放 | 精品女同一区二区 | 日本高清视频www | 亚洲三级黄| 日日爽视频| 成人综合色站 | 激情国产 | 国产女人呻吟高潮抽搐声 | free性m.freesex欧美 | 欧美xxxx吸乳 | 精品国产乱码久久久人妻 | 一级淫片免费 | 去毛片| 少妇伦子伦精品无吗 | 99久久久国产 | 毛片官网 | 欧美成人综合视频 | 精品久久久久一区 | 欧美精产国品一二三 | 欧美日韩精品二区 | 中国美女洗澡免费看网站 | 日韩av一区二区三区在线 | 精品国产av无码一区二区三区 | 国产毛片久久久 | 亚洲二三区 | 性生交大片免费看3p | 神马久久av | 黄网视频在线观看 | 亚洲精品中文字幕在线 | 青青草社区 | 浴室里强摁做开腿呻吟男男 | 色呦呦精品 | 国产激情在线观看 | 国产123在线 | 欧美日韩电影一区二区 | 好大好爽视频 | 日韩精品一区二区三区四区 | 91成人免费在线观看 | 欧美色综合天天久久综合精品 | 亚洲一区欧美一区 | 四虎影 | 欧美日韩精品在线观看视频 | 丰满人妻熟女aⅴ一区 | 国产精品入口麻豆 | 免费小视频在线观看 | 一本色道无码道dvd在线观看 | 黄色大片在线免费观看 | 伊人精品视频 | 第四色视频 | 日韩大片在线 | 日韩v在线| 亚洲精品网站在线播放gif | av免费不卡| 丰满少妇高潮一区二区 | 99久久99久久精品国产片桃花 | 免费a在线| 免费成人深夜夜国外 | 久久久久久久久久久网站 | 日韩三级一区二区 | 高h放荡受浪受bl | 国产乱码精品一区二区三区不卡 | 热久久国产精品 | av片子在线观看 | 天堂最新资源在线 | 一区二区视频网站 | 国产精品高潮呻吟久久aⅴ码 | 亚洲免费网站在线观看 | 黄色精品一区二区 |