python-3.x - `Content-Length` 和 `Transfer-Encoding` 有什么区别?urllib.request.urlopen
问题描述
我将使用 GitHub 网址下载。
但是,urlopen 接收到的值并不总是恒定的。
如果你运行下面的代码,
import urllib.request
url = "https://github.com/PixarAnimationStudios/USD/archive/v20.11.zip"
u = urllib.request.urlopen(url)
meta = u.info()
print(u.headers.keys())
print(u.headers.get("Content-Type"))
print(u.headers.get("Transfer-Encoding"))
print(u.headers.get("Content-Length"))
情况1
['Date', 'Content-Type', 'Content-Length', 'Connection', 'Access-Control-Allow-Origin', 'Content-Disposition', 'Content-Security-Policy', 'ETag', 'Strict-Transport-Security', 'Vary', 'X-Content-Type-Options', 'X-Frame-Options', 'X-XSS-Protection', 'X-Varnish', 'Age', 'Via', 'X-Cache', 'X-Cache-Hits', 'Accept-Ranges', 'Vary', 'X-GitHub-Request-Id']
application/zip
None
30301735
案例2
['Date', 'Content-Type', 'Transfer-Encoding', 'Connection', 'Access-Control-Allow-Origin', 'Content-Disposition', 'Content-Security-Policy', 'ETag', 'Strict-Transport-Security', 'Vary', 'X-Content-Type-Options', 'X-Frame-Options', 'X-XSS-Protection', 'X-Varnish', 'Age', 'Via', 'X-Cache', 'X-Cache-Hits', 'Accept-Ranges', 'Vary', 'X-GitHub-Request-Id']
application/zip
chunked
None
Content-Length
和 和有什么不一样Transfer-Encoding
?
我用python3.9
解决方案
Content-Length
和 和有什么不一样Transfer-Encoding
?
一个告诉您响应的内容有多长(并且可能不存在),另一个告诉您响应是否使用其他方式发送而不是直接发送数据(并且可能不存在)。
在第一种情况下,您会看到不使用chunked
Transfer-Encoding
服务器必须预先发送的方法Content-Length
,以便您的客户端知道它已收到整个文件。
在第二个中,文件是用 发送的chunked
,因此没有完整长度的预先声明,因此Content-Length
被省略。内容的长度可以根据每个块的总和来确定。
推荐阅读
- export - 不能在电脑上玩godot游戏作为软件
- arrays - 无法在 React 中将对象添加到数组
- python - HTTP 响应 403。是我的 Apache 配置问题还是我的 Python 对 URL 的 enoding 问题?
- flutter - Flutter: Navigator.pop(context);
- c# - C# IDisposable,MCSD 认证工具包中的一个令人困惑的问题(考试 70-483)
- alsa - ALSA 无法将 dmix 与路由一起使用
- python - 先找到不重复的字符
- list - 列表中的最大值及其在 Haskell 中的索引——在平局的情况下,我需要最靠近头部的元素
- node.js - 注册表单错误,无法发出 POST 请求
- java - 为什么 inputStream 到 outputStream 不能正常工作?