HTTP:当Range不受支持时,我应该如何响应“Range:bytes =”?

时间:2011-06-01 16:10:13

标签: http download http-headers webserver range

如果不支持Range: bytes=278528-,标题字段Range对GET请求的正确回复是什么?

阅读HTTP标头定义(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html)我想我至少应该设置:Accept-Ranges: none,但它明确指出

  

客户端可以生成字节范围请求,而不会收到所涉及资源的此标头。

因此,如果客户请求范围,我应该:

4 个答案:

答案 0 :(得分:8)

您可以忽略它,正如规范所说。确切地说:

  • 如果您支持,则返回状态代码206 Partial Content并包含正确的标题,例如Content-Range。
  • 如果您不支持,则正常返回200 OK。

我没有测试过这个,但规格似乎很清楚。我已经看到了这项工作 - 如果服务器不支持Range标头,使用wget或curl恢复中断下载将从头开始正确重启。

答案 1 :(得分:5)

RFC2616 section 14.35.2 says:

  

服务器可以忽略Range标头。

答案 2 :(得分:0)

忽略范围请求可能会在播放服务或其他不稳定或不可接受的内容上播放内容(这是巨大的)。我知道http不是正确的protokol传输视频,但尝试从服务器发送视频到不接受范围.... Airplay使用范围请求......

答案 3 :(得分:0)

可能是检查http标头,如果有一个范围字符串,解析它,解析范围,计算跳过和占据位置,从URL打开文件流,然后,寻求跳过并采取'take'字节,设置响应,发送响应和最后关闭流。 不要忘记用范围标题回复

不要忽略范围,永远不要在大流程上工作。

如果您使用的是nanohttp,我可以通过示例帮助您