【问题标题】:Content-Length is being stripped内容长度被剥离
【发布时间】:2011-07-30 00:24:38
【问题描述】:

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

【问题讨论】:

  • 注意,你打错了标签——你使用的是 web.py,但是你添加了 web2py 标签(它们不是同一个框架)。

标签: python web-services web.py


【解决方案1】:

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

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

【讨论】:

  • 这正是正在发生的事情。谢谢!
猜你喜欢
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 2016-12-15
  • 2022-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多