假设我从 Jetbrains.com 下载了一个像 Pycharm 这样的可执行文件。HTTP 用于传送网站的内容 - 当我下载文件时是否也使用它?我读到使用了 FTP,但也看到它已被现代浏览器禁用 - 推荐的协议是什么?
此外,如果网络中断,有时我可以继续下载而不会丢失进度。这是因为创建了一个“会话”,我可以重新加入会话并继续下载吗?在我必须从头开始下载之前,是什么决定了这段时间的持续时间?
use*_*686 30
假设我从 Jetbrains.com 下载了一个像 Pycharm 这样的可执行文件。HTTP 用于传送网站的内容 - 当我下载文件时是否也使用它?我读到使用了 FTP,但也看到它已被现代浏览器禁用 - 推荐的协议是什么?
查看下载列表中显示的 URL - 如果显示http://或https://,则是,使用 HTTP 下载文件。
现在几乎所有从网站下载的文件(甚至大多数不是从网站下载的,例如游戏更新)都是通过 HTTP 完成的。
没有很多选择。匿名 FTP 在过去更常见,但现在其设计的几个方面存在问题(FTP 实际上早于Internet 的 TCP/IP),例如它使用单独的“数据”连接导致与防火墙相关的问题。匿名 NFS (WebNFS) 也从未成为一种东西。
此外,如果网络中断,有时我可以继续下载而不会丢失进度。这是因为创建了一个“会话”,我可以重新加入会话并继续下载吗?
不; 恢复机制是无状态的,就像 HTTP 的其他大部分内容一样。
当您请求静态文件(而不是动态生成的网页)时,浏览器可以请求特定范围而不是整个文件。例如,如果后12300个字节的下载停止,您可以继续在任何时间通过包括Range: 12301-头。
因此,只要文件仍然存在,您需要做的就是不断重新请求相同的 URL,并添加适当的 Range 标头。(浏览器还使用If-Match标头来确保文件没有更改。)
有些网站提供仅限于特定会话的下载(作为 cookie 或嵌入在 URL 中的特殊令牌)。这些下载仍然使用与以前相同的范围请求恢复 - 虽然网络服务器可能会认为您的 URL 已过期并完全阻止继续下载,但这与实际的恢复机制无关。
(当然,网站可以完全通过动态脚本提供下载服务。在这种情况下,是否处理范围请求取决于程序员。例如,从 Google Drive 下载压缩文件夹时,.zip 文件是随时随地生成;即使它的“总大小”也是未知的——在这种情况下,文件可能根本无法恢复。)