Google App Engine上的HTTP响应标头是否有大小限制?

时间:2013-03-07 19:28:38

标签: google-app-engine python-2.7 http-headers

我试图在appspot上运行某个处理程序代码上的分析器,并且正在寻找一种方法来显示pstats输出,而无需直接写入响应主体(对于使用结构化数据(如JSON)进行响应的处理程序会出现问题)。

我决定尝试将输出写入响应头,并将一些js添加到我的html呈现处理程序中,这些处理程序可以解析标题并console.log()它(结果非常简单和方便) 。对于非html渲染处理程序,我想我可能会尝试构建一个chrome扩展来做类似的事情,但当然,每当我对这样的处理程序进行ajax调用时,调用页面(用js来解析)标题)可以介入并处理显示。

当我在dev_appserver上进行测试时,这一切看起来都不错,但后来我部署到appspot并发现我的自定义标头从未显示过。我在这个项目中有类似的代码片段,它跟踪某些操作的执行时间,以及我编写的自定义头文件显示正常。

我假设appspot python运行时进程有一个限制,如果它超过一定长度,则省略了标题,但我没有看到开发者网站上任何地方发布的大小。

如果确实有限制,有人知道它是什么吗?

1 个答案:

答案 0 :(得分:6)

我找不到任何关于此的文档,但整个标题行的限制似乎是497个字节(包括键,冒号,冒号后的空格,但不包括该行末尾的'\r\n'

这是一个Go测试处理程序:

func Test(c appengine.Context, w http.ResponseWriter, r *http.Request) {
    l, err := strconv.ParseInt(r.URL.Query().Get("len"), 10, 64)
    if err != nil {
        http.Error(w, "", http.StatusBadRequest)
        return
    }
    value := ""
    for l != 0 {
        value += "X"
        l--
    }
    w.Header().Set("Set-Cookie", value)
    w.Header().Set("Test-Header", value)
    w.Header().Set("Very-Very-Long-Test-Header", value)
    w.Header().Set(value, "Test-Value")
    w.WriteHeader(http.StatusNoContent)
}

len查询参数设置为469是不会删除Very-Very-Long-Test-Header标头的最大值。 484是保留Test-Header标题的最大值,485是保留Xxxxx…标题的最大值。

他们每行最多加起来497,或者如果你愿意的话,495除去": "

注意此限制不适用于传入(请求)标头。

更新: Set-Cookie标头有不同的限制:4108字节而不是497。