Pylons 响应未返回 Content-Length 头部
我现在还在努力解决一个问题,就是如何在Pylons中将文件流式传输到HTTP响应中。除了最开始的问题,我发现我无法返回Content-Length这个头信息,这样对于大文件来说,客户端就无法估算下载需要多长时间。我试过
response.content_length = 12345
也试过
response.headers['Content-Length'] = 12345
但在这两种情况下,HTTP响应(在Fiddler中查看)根本没有包含Content-Length这个头信息。我该怎么做才能让Pylons返回这个头信息呢?
(哦,如果你有任何关于如何流式传输文件的想法,请回复原来的问题——我已经没有其他想法了。)
编辑:虽然这不是一个通用的解决方案,但对于提供静态文件来说,FileApp
可以发送Content-Length头信息。而对于动态内容,看来Alex Martelli的回答是唯一的选择。
2 个回答
0
试试这个:
response.headerlist.append((str("Content-Length"), str(" 123456")))
1
这里有一段中间件代码,可以在这里找到,它的作用是确保所有的响应都能有一个内容长度的头信息,如果没有的话。你可以稍微修改一下,让它在响应中设置其他的头信息(比如说 'X-The-Content-Length'),然后中间件就可以用这个来生成内容长度,如果原本的内容长度缺失的话。我把这整个过程看作是一个解决方案,因为我认为这是pylons的一个bug(它对内容长度的态度太随意了!),不过显然pylons的作者并不这么认为,所以至少有个解决办法也不错!