假设我从 Jetbrains.com 下载了一个可执行文件,比如 Pycharm。网站内容是通过 HTTP 传输的 - 我下载文件时也会用到 HTTP 吗?我了解到有人使用了 FTP,但也发现现代浏览器已经禁用了 FTP - 推荐的协议是什么?
此外,如果网络中断,有时我可以继续下载而不会丢失进度。这是因为创建了一个“会话”,我可以重新加入会话并继续下载吗?是什么决定了这段时间持续多长时间,之后我必须从头开始重新下载?
答案1
假设我从 Jetbrains.com 下载了一个可执行文件,比如 Pycharm。网站内容是通过 HTTP 传输的 - 我下载文件时也会用到 HTTP 吗?我了解到有人使用了 FTP,但也发现现代浏览器已经禁用了 FTP - 推荐的协议是什么?
查看下载列表中显示的 URL – 如果显示http://
或https://
,则表示使用了 HTTP 下载文件。
几乎所有文件都是从网站下载的(甚至大多数下载不是如今,来自网站的所有信息(例如游戏更新)都是通过 HTTP 完成的。
没有太多替代方案。匿名 FTP 在过去更为常见,但如今其设计的一些方面存在问题(FTP 实际上早于互联网的 TCP/IP 协议),例如它使用单独的“数据”连接,导致防火墙相关的问题。匿名 NFS (WebNFS) 也从未成为现实。
此外,如果网络中断,有时我可以继续下载而不会丢失进度。这是因为创建了一个“会话”,我可以重新加入会话并继续下载吗?
不是;恢复机制是无状态的,就像 HTTP 的其他大多数内容一样。
当你请求静态文件(而不是动态生成的网页)时,浏览器可以询问具体范围而不是整个文件。例如,如果您的下载在 12300 字节后停止,您可以恢复随时通过添加Range: 12301-
标题。
因此,只要文件仍然存在,您需要做的就是不断重新请求相同的 URL,并添加适当的 Range 标头。(浏览器还使用如果匹配标头以确保文件没有改变。)
有些网站提供仅限于特定会话的下载(以 cookie 或嵌入在 URL 中的特殊令牌的形式)。这些下载是仍然使用与之前相同的范围请求恢复 - 虽然 Web 服务器可能会判定您的 URL 已过期并完全阻止继续下载,但这与实际的恢复机制无关。
(当然还有一个网站可以完全通过动态脚本提供下载。在这种情况下,程序员可以自行决定是否处理范围请求。例如,从 Google Drive 下载压缩文件夹时,.zip 文件会即时生成;甚至其“总大小”也未知 - 在这种情况下,该文件可能根本无法恢复。)
答案2
简短的回答是是的它是 HTTP/HTTPS。
不过,我想花点时间来解释为什么更长的答案尤其对那些对技术感兴趣的人来说很重要。
HTTP 什么也不是但文件传输协议。它并不特殊。HTTP 不能处理文件以外的内容。
图片 - 它们只是文件。Javascript:只是文本文件。网页:同样,只是文本文件。视频是文件。甚至 YouTube 视频也只是一堆文件(单个 YouTube 视频被分割成数百个长度约为 10 秒的小文件,以便您可以快退和快进视频,YouTube 视频不是单个文件 - 视频下载器会在保存时自动为您合并文件)。
HTTP 工作的核心其实很简单。事实上,它非常简单,这种简单性(所有东西都只是要下载的文件)是 HTTP 相对于其他网络多媒体/交互协议成功的原因。文件,尤其是文本文件,是程序员可以理解的东西。
为使互联网成为如今的样子,HTTP 中添加的复杂位被作为元数据添加到“文件”中。就像磁盘上的文件具有文件名、创建日期、所有权等元数据一样,HTTP 提供的文件具有 cookie、授权信息、上次更新时间等元数据。
了解了这一点,你应该意识到网络,尤其是 HTTP,并没有什么神奇之处。它只是允许你的浏览器下载文件。正是浏览器解释这些文件的方式增加了魔力。不过,http 代理不一定是浏览器。只要你知道如何制作正确的请求,你就可以编写一个程序来下载任何通过 HTTP 提供的内容。事实上,大多数人使用卷曲和获得为了这。