内容长度正被剥离

时间:2011-04-05 14:04:47

标签: python web-services web.py

我正在使用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)})

1 个答案:

答案 0 :(得分:3)

如果数据以分块(Transfer-Encoding: chunked)的形式发送,则必须省略Content-Length标题,as per RFC 2616

  
      
  1. [剪断]

  2.   
  3. 如果存在Transfer-Encoding标头字段(第14.41节)    除了“身份”之外还有任何其他值,那么转移长度是    通过使用“分块”转移编码(第3.6节)来定义,    除非通过关闭连接终止消息。

  4.   
  5. 如果存在Content-Length标头字段(第14.13节),则为其    OCTET中的十进制值表示实体长度和    转发长度。不得发送Content-Length头字段    如果这两个长度不同(即,如果转移编码    标题字段存在)。如果收到包含a的消息    Transfer-Encoding标头字段和Content-Length标头字段,    后者必须被忽略。

  6.