2013-03-07 187 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

相關問題