2013-03-07 100 views
7

我试图在appspot上运行一些处理程序代码的分析器,并且正在寻找一种方式来显示pstats输出而不直接写入响应正文(这对处理程序响应结构化数据(如JSON)而言是个问题)。Google App Engine上的HTTP响应头是否有大小限制?

我决定尝试将输出写入响应头文件,并将一些js添加到我的html渲染处理程序中,该处理程序可以解析头文件和它(原来非常简单和便于处理)。对于非HTML渲染处理程序,我想我可能会尝试构建一个chrome扩展来执行类似的操作,但当然,每当我对这样的处理程序进行ajax调用时,调用页面(使用js解析标题)可以介入并处理显示。

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

我假设appspot python运行时进程存在限制,如果它大于特定长度,则忽略头,但在开发人员网站上的任何位置都看不到大小。

如果实际上有限制,是否有人知道它是什么?

+0

也许这是一个愚蠢的问题,但我会问反正。报头是否被缓存? – bernie 2013-03-07 19:42:58

+0

@bernie自定义标题我已经显示执行时间因请求而异,所以我不认为缓存是一个问题。 – 2013-03-07 22:42:24

+0

我明白了。感谢澄清,并为基础外问题表示歉意。 – bernie 2013-03-07 22:44:07

回答

6

我不能找到有关这个的任何文件,但限制似乎是整个标题行497个字节(包括关键,冒号,冒号后的空白,但末排除'\r\n'的线)。

这里有一个去测试分选机:

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个不包括": "

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

UPDATE:Set-Cookie头有不同的限制:4108个字节,而不是497.

+0

这非常有帮助的Atilla。我们真的很困惑,为什么我们的标题在生产中消失了。现在我们只是使用Set-Cookie头代替旧的x-jwt头进行身份验证。 – 2014-09-08 23:05:03

相关问题