2013-03-07 11 views
7

Próbowałem uruchomić profiler na jakimś kodzie obsługi w appspot i szukałem sposobu na pokazanie wyjścia pstats bez bezpośredniego pisania do treści odpowiedzi (co jest problematyczne dla procedur obsługi odpowiadających danymi strukturalnymi, takimi jak JSON).Czy istnieje limit rozmiaru dla nagłówków odpowiedzi HTTP w Google App Engine?

Postanowiłem spróbować napisać wynik do nagłówka odpowiedzi i dodałem js do moich procedur obsługi renderowania html, które mogą parsować nagłówek i console.log() (okazało się to bardzo proste i wygodne w użyciu). Dla procedur obsługi renderowania innych niż HTML, myślałem, że mógłbym spróbować zbudować rozszerzenie chrome, aby zrobić coś podobnego, ale oczywiście, gdy robię wywołanie ajaxa do takiego handler'a, strona wywołująca (z js do parsowania nagłówek) może wejść i obsługiwać wyświetlacz.

Wszystko to wyglądało dobrze, ponieważ testowałem na dev_appserver, ale potem wdrożyłem aplikację i odkryłem, że mój niestandardowy nagłówek nigdy się nie pojawił. Mam podobny fragment kodu w tym projekcie, który śledzi upływający czas wykonywania pewnych operacji, a niestandardowe nagłówki piszę te rzeczy, aby pokazać się dobrze.

Zakładam, że istnieje limit miejsca w procesie runtime appspot python, który pomija nagłówek, jeśli jest większy niż pewna długość, ale nie widzę rozmiaru opublikowanego nigdzie w witrynie programisty.

Jeśli w rzeczywistości istnieje limit, czy ktoś wie, co to jest?

+0

Być może jest to głupie pytanie, ale spytam tak. Czy nagłówek jest buforowany? – bernie

+0

@bernie niestandardowe nagłówki Mam pokazywane czasy wykonania różnią się od żądania do żądania, więc nie sądzę, że pamięć podręczna jest tutaj problemem. –

+0

Rozumiem. Dziękuję za wyjaśnienie i przeprosiny za pytanie poza bazą. – bernie

Odpowiedz

6

nie mogę znaleźć żadnej dokumentacji na ten temat, ale granica wydaje się być 497 bajtów dla całej linii nagłówka (tym klucz, okrężnicy spacji po dwukropku, ale wyłączeniem'\r\n' na koniec linii).

Oto obsługi testu 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) 
} 

Ustawienie parametru len zapytania do 469. jest największą wartość, która nie usuwa nagłówek Very-Very-Long-Test-Header. 484 jest największym, który zachowa nagłówek Test-Header, a 485 jest największym, który zachowa nagłówek Xxxxx….

Wszystkie one sumują do 497 na linię lub, jeśli zechcesz, 495 z wyłączeniem ": ".

UWAGA, że ten limit nie dotyczy nagłówków przychodzących (żądania).

UPDATE: Nagłówek Set-Cookie ma inną granicę: 4108 bajtów zamiast 497.

+0

To była niesamowicie pomocna Atilla. Byliśmy naprawdę zaskoczeni, dlaczego nasze nagłówki zniknęły w produkcji. Teraz używamy nagłówka Set-Cookie zamiast naszego starego nagłówka x-jwt do uwierzytelnienia. –