我正在使用webpy 0.34,python 2.6.6。我也在使用mimerender。我试图在我的http响应中包含内容长度,但由于某种原因,标题被删除。我说删除因为我可以创建自定义标头就好了,我可以在客户端看到这些标题。但是当我尝试设置内容长度时,标题永远不会传到客户端。我已经尝试在web.created对象中包含标题(如图所示),我也尝试使用
web.header('Content-Length', len(data))
我做错了什么和/或不了解这段代码是如何运作的?
render_json = lambda **args: json.JSONEncoder().encode(args)
class MyHandler:
@mimerender(
default = 'json',
json = render_json,
)
def POST(self):
data = "abcd"
raise web.created(data, headers={'Content-Length': len(data)})
答案 0 :(得分:3)
如果数据以分块(Transfer-Encoding: chunked
)的形式发送,则必须省略Content-Length
标题,as per RFC 2616:
[剪断]
如果存在Transfer-Encoding标头字段(第14.41节) 除了“身份”之外还有任何其他值,那么转移长度是 通过使用“分块”转移编码(第3.6节)来定义, 除非通过关闭连接终止消息。
- 醇>
如果存在Content-Length标头字段(第14.13节),则为其 OCTET中的十进制值表示实体长度和 转发长度。不得发送Content-Length头字段 如果这两个长度不同(即,如果转移编码 标题字段存在)。如果收到包含a的消息 Transfer-Encoding标头字段和Content-Length标头字段, 后者必须被忽略。