假设这是一个编程问题(假设这是 StackOverflow),我将解释如何链接到利用此功能的下载加速器。
服务器需要什么才能做到这一点?
Range。Range通过使用端点或基于 IP 的限制服务器端,可以支持但不允许多个同时连接。因此,我建议您在测试时设置一个简单的测试服务器,而不是从文件共享站点下载。是什么Range标题?
Range如果未设置标头,则通过 HTTP 传输的数据将从文件开头开始按顺序发送。服务器上文件的第一个字节将是 HTTP 响应的第一个字节,服务器上文件的最后一个字节将是 HTTP 响应的最后一个字节。这Range头允许您指定字节应从何处开始发送,从而允许您“跳过”响应的开头。
实际答案示例
我们的情况
响应是纯文本。响应内容只有一个字“StackOverflow!!” ASCII 编码,即每个字符都是一个字节。因此,Content-Length标头的值为 15 个八位字节(字节的另一个术语)。
我们将使用 3 个请求来下载该文件。在本示例中,我们假设速度会快 3 倍,但您应该意识到,此方法会使非常小的文件的下载速度变慢。这是因为 HTTP 标头必须与每个请求以及 3 次握手一起发送。我们还将假设服务器支持 HEAD 请求并且Content-Length标头与下载响应一起发送。最后,由于 HEAD 请求的原因,该请求将使用 GET 来执行。不过,对于 POST 有一些解决方法。
多汁的细节
首先,执行 HTTP HEAD 请求。获取“Content-Length”标头,并将该值除以您希望建立的并发并行连接数。对于这个例子,Content-Length为 15,我们希望建立 3 个连接,因此除后的值为 5。
现在执行您希望并行执行的请求数量。对于每个请求,将Range标头设置为“Range: bytes=”,然后将已发出的请求数乘以上面找到的除值。然后附加“-”,后跟刚刚确定的值加上除后的值。对于此示例,每个请求都应具有如下设置的标头。
Range: bytes=0-5Range: bytes=5-10Range: bytes=10-15每个请求的响应应该是
本质上,我们只是遵守范围规范(RFC 2616 的第 3.12 节)以及字节范围规范(RFC 2616 的第 14.35 节)。
最后,附加每个请求的字节以形成最终的响应数据。
免责声明:我从未真正尝试过这个,但理论上它应该有效
| 归档时间: |
|
| 查看次数: |
1520 次 |
| 最近记录: |