【问题标题】:What does HTTP download exactly mean?HTTP 下载到底是什么意思?
【发布时间】: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 请求的必要性)

标签: http web tcp download


【解决方案1】:

HTTP 下载到底意味着什么? 的完整答案在其 RCF 2616 规范中,您可以在此处阅读:https://www.rfc-editor.org/rfc/rfc2616

当然,这是一个很长(但非常详细)的文档。

我不会在这里复制或总结它的内容。

在您的问题正文中,您更具体:

所以从字面上理解,它是用于文本传输的。

我认为“TEXT”这个词会误导你。

必须在通过 HTTP 传输之前将我们想要下载的任何内容转换为字符

错误。您不一定非要这样做。

文件(例如 JPEG 图像)可以通过网络发送而无需任何类型的编码。例如:When a web server returns a JPEG image (mime type image/jpeg), how is that encoded?

请注意,可以选择应用压缩或编码(最常见的情况是 GZIP 用于文本内容,如 html、文本、脚本......)但这取决于客户端和服务器如何就数据必须如何达成一致被转移。该“协议”是通过分别在请求和响应的标头中的“Accept-Encoding”和“Content-Encoding”指令达成的。

【讨论】:

  • 音频和视频文件呢?
  • 服务器硬盘上有视频 .mp4 或音频 .mp3。相同的字节从服务器传输到客户端(连同响应头) - 当然,除非服务器配置为对数据应用一些压缩(例如 GZIP)。在传输 jpg、mpeg、mp3... 时,通常不会应用进一步的压缩,因为计算成本高且不会减少数据大小。
  • 我希望所有答案都在 RFC 中。我会详细阅读。
【解决方案2】:

我知道这个名称会误导您,但是如果您将超文本传输​​协议视为具有超文本功能的传输协议,那么它会有所改变。

在开发 HTTP 时,已经有很多协议(例如,IP 协议,这是在互联网上的服务器之间广泛传输数据的方式),但没有允许在文档之间轻松导航的协议。

HTTP 是一种允许传输信息和嵌入在文本文档中的超文本(即链接)的协议。这些链接不一定要指向其他文本文档,因此您基本上可以使用 HTTP 传输任何信息(发送者和接收者使用一种称为 mime 类型的东西就发送的文档类型达成一致)。

所以这个名字仍然有意义,即使你可以发送文本文件以外的东西。

【讨论】:

  • 所以超文本不是字面意思/仅仅文本。
【解决方案3】:

HTTP 代表超文本传输​​协议。所以从字面上理解,它是用于文本传输的。

是的,文本传输。不一定是plain text,而是所有文字。这并不意味着您的文本必须由人阅读,只要计算机即可。

我使用了一些嗅探器工具来监控有线流量。传输的都是 ASCII 字符。

您的嗅探器工具知道您是一个人,因此它不会只向您显示 0 和 1。它将获得的任何内容转换为 ASCII 字符,以使您可以阅读。有线上的所有通信都是二进制的。 ASCII 表示只是为了您的缘故。

所以我想我们必须在通过 HTTP 传输之前将我们想要下载的任何内容转换为字符

不,一点也不。同样,它是文本——不一定是纯文本。

我一直认为是 TCP 可以传输任何数据,[...]

你是对的。 TCP 确实传输所有数据,但在完全不同的层中。要理解这一点,我们来看看OSI model

当您通过网络发送任何内容时,您的数据会通过所有不同的层。一是应用层。这里我们有 HTTP 和其他几个。您通过 HTTP 发送的所有内容都会经过各个层,通过表示层,一直到物理层。

因此,当您说 TCP 传输数据时,您是对的(HTTP 可以在其他传输协议上工作,例如 UDP,但这种情况很少见),但 TCP 传输您的所有数据无论您是从网络服务器下载文件、在计算机之间复制本地网络上的共享文件夹还是发送电子邮件。

【讨论】:

    【解决方案4】:

    HTTP 可以很好地传输“二进制”数据。无需转换任何东西。

    【讨论】:

      【解决方案5】:

      HTTP 是用于传输数据的协议。在您的情况下,您正在下载的任何文件。

      【讨论】:

        【解决方案6】:

        您可以这样做(打开另一种类型的连接),也可以将数据作为原始文本发送。您将发送的内容正是您在文本编辑器中打开文件时所看到的内容。您的浏览器只是决定将文件保存在您的“下载”文件夹(或您想要的任何位置)中,因为它发现文件类型不支持(.rar、.zip)。

        【讨论】:

          【解决方案7】:

          如果您查看OSI model,HTTP 是一种存在于应用层的协议。因此,当您听到有人使用“HTTP 传输数据”时,他们指的是应用层协议。例如,另一种选择是 FTP 或 NFS。

          当使用 HTTP 时,浏览器确实打开了 TCP 连接。 TCP 位于传输层,在 IP 之上提供可靠的连接。

          HTTP 协议提供了不同的动词可以用来检索和发送数据,GET 和 POST 是最常见的。查找REST

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-08-07
            • 2017-07-20
            • 2014-09-23
            • 2014-07-25
            • 2012-09-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多