POST请求中包含Range字段是否标准

蓝皮鼠_93822
  • 2.2k

大家好,我们在用POST请求向我们自研的HTTPSVR发送数据,由于数据是分片的,我们在POST的head里面加上了Range字段来告诉server当前上传文件的偏移值。现在的问题是我们的请求被某些代理过滤掉了Range字段导致我们的sevrer拿不到该字段,我查了下RFC,也没见说POST里面不许加Range的,是否标准呢?

回复
阅读 7.4k
1 个回答

参见HTTP RFC:http://www.w3.org/Protocols/rfc2616/r...

HTTP协议的RFC中明确说了,对PUT方法,接收者不能忽视任何Content-* Header,但POST方法没有明确说。这种用法比较冷门,所以,有的Web Server和Proxy很可能不会实现POST方法的Content-Range支持。

GET方法的Content-Range支持是非常普遍的,各种断点续传的下载软件都是靠这个实现的。

开源项目gears上有一篇proposal是讲"POST/PUT 支持 Content-Range"的,你可以参照一下:http://code.google.com/p/gears/wiki/C...

你们的Web Server是自己写的,不存在不支持这个Header的可能,关键就是中间的各类七层代理(负载均衡、反向代理等)。以HAporxy为例,如果打开了keep-alive选项,HAproxy会对后端的Web Server使用HTTP长连接,End User这边发起1000个HTTP请求,HAproxy可能只向后端Web Server发起50个持久连接,这时候,不要说是Content-Range,其它HTTP头也会丢弃。

所以:
1. 如果你不能控制中间的各类七层代理,最好不要使用HTTP协议没有明确规定且不太常用的HTTP Header,改为在HTTP Body里实现。这么做的优点是兼容性好,缺点是性能差一点(相对写在Header中而言)
2. 如果你很在意性能,且不想改动Content-Range的相关代码(从Header移到到Body处理中去),则要有向中间七层代理服务提需求的能力

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏