2011-04-05 91 views
2

我使用的是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

注意,你已经得到了错误的标签 - 你使用web.py,但你已经添加了web2py的标签(它们不是同一个框架)。 – Anthony 2011-04-05 20:51:56

+0

良好的捕获,谢谢 – ryanday 2011-04-05 21:56:26

回答

3

如果作为分块(Transfer-Encoding: chunked),则Content-Length头必须被省略,as per RFC 2616数据被发送:

  1. [剪断]

  2. 如果传送编码标题字段(第14.41节)存在且 具有“身份”以外的任何值,则传输长度为 ,定义为除非通过关闭连接终止消息,否则使用“分块”传输编码(第3.6节), 。

  3. 如果存在内容长度标头字段(14.13节),则其OCTET中的其十进制值即 表示实体长度和传输长度。如果这两个长度不同(即,如果存在传输编码 标题字段),则不应发送内容长度标题字段 。如果一个消息同时收到一个 Transfer-Encoding头域和一个Content-Length头域, ,后者务必被忽略。

+0

这就是发生了什么。谢谢! – ryanday 2011-04-05 21:57:22