如果不支持Range
,对具有标头字段Range: bytes=278528-
的GET请求的正确响应是什么?
正在读取HTTP标头定义(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html)我想我至少应该设置:Accept-Ranges: none
,但它清楚地表明
客户端可能在没有收到有关资源的此标头的情况下生成字节范围请求。
所以,如果客户请求一个范围,我应该:
- 用字节0的整个文件答复
- 回复某些状态错误?(400/406/416/501)参见:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
正如规范所说,您可以忽略它。准确地说:
- 如果您支持它,您将返回状态代码206 Partial Content,并包括适当的标头,如Content Range
- 如果你不支持它,你会像往常一样返回200 OK
我还没有测试过这个,但规格似乎很清楚。我已经看到了这项工作——如果服务器不支持Range标头,使用wget或curl恢复中断的下载将从一开始就正确地重新启动。
RFC2616第14.35.2节说:
服务器可能会忽略Range标头。
可能是检查http标头,如果有范围字符串,则解析它,解析到范围,计算跳过并获取位置,从url打开文件流,然后,寻求跳过并获取'take'字节,设置它的响应,发送响应并最终关闭流。不要忘记使用测距头进行响应
不要忽略范围,当你在处理大数据流时千万不要忽略。
如果您使用的是nanohttp,我可以通过示例
忽略范围请求可能会使airplay服务或其他服务上的播放内容(巨大)不稳定或不可接受。我知道http不适合protokol传输视频,但尝试从不接受范围的服务器将视频发送到airplay。。。。Airplay使用范围请求。。。