我试图在appspot上运行某个处理程序代码上的分析器,并且正在寻找一种方法来显示pstats输出,而无需直接写入响应主体(对于使用结构化数据(如JSON)进行响应的处理程序会出现问题)。
我决定尝试将输出写入响应头,并将一些js添加到我的html呈现处理程序中,这些处理程序可以解析标题并console.log()
它(结果非常简单和方便) 。对于非html渲染处理程序,我想我可能会尝试构建一个chrome扩展来做类似的事情,但当然,每当我对这样的处理程序进行ajax调用时,调用页面(用js来解析)标题)可以介入并处理显示。
当我在dev_appserver
上进行测试时,这一切看起来都不错,但后来我部署到appspot并发现我的自定义标头从未显示过。我在这个项目中有类似的代码片段,它跟踪某些操作的执行时间,以及我编写的自定义头文件显示正常。
我假设appspot python运行时进程有一个限制,如果它超过一定长度,则省略了标题,但我没有看到开发者网站上任何地方发布的大小。
如果确实有限制,有人知道它是什么吗?
答案 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。