【问题标题】:How's file downloaded by the browser over HTTP浏览器如何通过 HTTP 下载文件
【发布时间】:2015-10-12 06:41:22
【问题描述】:

我目前正试图准确了解浏览器将文件下载到桌面时会发生什么,特别是使用了多少 HTTP 请求,该过程与仅获取图像或脚本等资源有何不同。我'如果有人从A browser sends HTTP request 开始在这里列出流程,将不胜感激。

【问题讨论】:

    标签: javascript html http download


    【解决方案1】:
    1. 浏览器发送 http 请求
    2. 服务器响应要下载的文件,并添加一些 HTTP 标头(表示这是要下载的文件),通常按照以下几行: Content-Type: application/octet-stream Content-Disposition: attachment; filename="picture.png"
    3. 浏览器然后根据用户设置处理响应(通常在保存前请求许可)

    我知道这有点阅读,但this 是一个很好的资源。此外,对于不太激烈的介绍,this 帮助了我很多。

    关于使用的 HTTP 请求的数量,答案是 1。完成 TCP 握手,然后传输请求,然后发回响应。如果一切都通过 SSL/TLS 会涉及更多内容,但这只是一个 HTTP 请求/响应周期的一部分。

    【讨论】:

    • 谢谢,但是您描述了非常顶级的流程,我知道这一切。例如,The server responds with the file to be downloaded 不是我要找的,因为服务器对文件一无所知,它在带有标题 Content-Type: multipart/form-data 的响应正文中发送二进制代码
    • 很抱歉,但我不确定您的意思。这是一个简单的过程。除了标题之外,服务器如何发送文件以及它如何提供 HTML 或图像并没有真正的区别。那么,我需要更多关于服务器端、客户端还是传输的详细信息。
    • 我现在一直在寻找相同的答案。下载文件是否作为单个 HTTP 响应发送,无论文件多大(以千兆字节为单位)?还是持续不断地流式传输?
    • 如果这有帮助,请告诉我。当服务器响应对要下载的文件的请求时,它包括某些标头,包括 Content-Type、Content-Disposition 和 Content-Length。根据这些标头中的值,浏览器决定如何继续。例如,application/octet-stream 的 Content-Type 以及 Content-Length 标头让浏览器知道在响应正文中期望一定数量的二进制数据。就响应的主体而言,单个 HTTP 事务通过 TCP 流进行,因此它既是流又是单个响应。
    猜你喜欢
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多