2013-03-07 14 views
7

私はappspotにいくつかのハンドラのコードをアップでプロファイラを実行しようとしていたと(例えばJSONなどの構造化データで応答ハンドラーの問題がある)レスポンスボディに直接書き込まずにpstats出力を表示する方法を探していました。Google App EngineにHTTP応答ヘッダーのサイズ制限はありますか?

私はレスポンスヘッダーに出力を書き出し、ヘッダーを解析できるHTMLレンダリングハンドラーにいくつかのjsを追加しました。console.log()(これは非常に簡単で使い勝手が良いことが判明しました)。非htmlレンダリングハンドラの場合、私は同様のことをするためにクロムエクステンションを構築しようと考えていたかもしれませんが、もちろん、そのようなハンドラにajaxコールを行うときはいつでも、呼び出しページ(jsを解析するヘッダー)は、ステップインしてディスプレイを操作できます。私はdev_appserver上でテストしていたとして

このすべてが良い見えたが、その後私はappspotために配備し、私のカスタムヘッダーが現れなかったことがわかりました。このプロジェクトでは、特定の操作の実行経過時間を追跡する同様のコードを使用しています。カスタムヘッダーを使用して、その情報を上手く表示します。

appspotのpythonランタイムプロセスに一定の長さを超えるヘッダーが省略されていても、開発者サイトのどこにでも公開されているサイズが表示されない場合があります。

制限が実際に存在する場合、誰もがそれが何であるかを知っているのですか?

+0

の4108のバイトを。ヘッダーはキャッシュされていますか? – bernie

+0

@bernie実行時に表示されるカスタムヘッダーはリクエストごとに異なりますので、ここでキャッシュが問題ではないとは思いません。 –

+0

私は参照してください。明確にしていただきありがとうございます。 – bernie

答えて

6

私はこれについてのドキュメントを見つけることはできませんが、制限がキー、コロン、コロンの後に空白が、終わり'\r\n'を除く含めた全体のヘッダ行のための497バイト(のようですラインの)。

ここに行くのテストハンドラです:469にlenクエリパラメータを設定する

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) 
} 

Very-Very-Long-Test-Headerヘッダを削除しない最大値です。 484はTest-Headerヘッダーを保持する最大値であり、485はXxxxx…ヘッダーを保持する最大値です。

彼らはすべての行ごとに497まで追加、またはあなたが、495は": "を除くするかどうか。

注記この制限は着信(要求)ヘッダーには適用されません。

UPDATE:Set-Cookieヘッダは異なる制限があります。おそらく、これは愚かな質問ですが、私はとにかく頼むよ代わりに497

+0

これは信じられないほど有用なアティラでした。我々は、なぜ我々のヘッダーが生産中に消えたのか、本当に困惑した。今度は認証のために古いx-jwtヘッダーの代わりにSet-Cookieヘッダーを使用しています。 –

関連する問題