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)})
4

1 回答 1

3

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

  1. [剪辑]
  1. 如果存在 Transfer-Encoding 头字段(第 14.41 节)并且具有除“identity”以外的任何值,则传输长度通过使用“分块”传输编码(第 3.6 节)定义,除非消息被终止通过关闭连接。
  1. 如果存在 Content-Length 头字段(第 14.13 节),则其在 OCTET 中的十进制值表示实体长度和传输长度。如果这两个长度不同(即,如果存在 Transfer-Encoding 头字段),则不得发送 Content-Length 头字段。如果接收到的消息同时带有 Transfer-Encoding 头字段和 Content-Length 头字段,则必须忽略后者。
于 2011-04-05T14:08:40.703 回答