【发布时间】:2013-12-03 21:15:54
【问题描述】:
我经常听到人们说使用 HTTP 下载。从技术上讲,它的真正含义是什么?
HTTP 代表超文本传输协议。所以从字面上理解,它是为了文本传输。我使用了一些嗅探器工具来监控有线流量。传输的都是 ASCII 字符。所以我想我们必须在通过 HTTP 传输之前将我们想要下载的任何内容转换为字符。使用 HTTP URL 编码?还是一些二进制到文本的编码模式,例如 base64?但这需要在客户端进行一些解码。
我一直认为是 TCP 可以传输任何数据,所以我猜测 HTTP 下载是一个误用的词。它的出现是因为我们通过 HTTP 查看网页并在该页面上找到一些可下载的链接,然后我们单击它进行下载。实际上,浏览器打开一个 TCP 连接来下载它。与 HTTP 无关。
任何人都可以解释一下吗?
【问题讨论】:
-
您可以将任何原始字节数据显示为 ascii 字符,这完全取决于您的解释器。不需要转换。无论如何,普通数据包通常都以字节数组的形式实现,这实际上也是字符串的实现方式。
-
@RedAlert 所以 HTTP 可以传输任何原始字节数据,就好像它们是有意义的文本一样?
-
@RedAlert 我刚刚检查了stackoverflow.com/questions/3538021/why-do-we-use-base64。看来我们必须使用 Base64 编码来确保数据完好无损地到达。
-
您是否查看过图像(顺便说一句是二进制数据)是如何通过 HTTP 传输的?使用您的网络嗅探器或浏览器开发者工具中的网络选项卡...
-
@smwikipedia HTTP 的主体可以是任何数据。然而,接收者需要知道如何处理它接收到的数据,并且在某些情况下,例如 HTML,它需要纯文本。在需要以纯文本格式嵌入二进制数据的情况下,base64 就会出现。例如直接在 HTML 中嵌入 PNG 图像(这避免了第二个 HTTP 请求的必要性)