2012-10-05 14 views
7

Czy nagłówek odpowiedzi HTTP (taki jak ten poniżej) jest legalny, nawet jeśli nie zawiera długości treści ani kodowania transferu?Nagłówki odpowiedzi HTTP są poprawne bez przesyłania-kodowania i długości treści?

- Http: Response, HTTP/1.1, Status: Ok, URL: /AAA/B.json 
    ProtocolVersion: HTTP/1.1 
    StatusCode: 200, Ok 
    Reason: OK 
    Expires: Fri, 05 Oct 2012 01:41:30 GMT 
    Date: Fri, 05 Oct 2012 01:40:46 GMT 
    Vary: Accept-Encoding 
    Accept-Ranges: bytes 
    Cache-Control: public, max-age=43 
    Server: Noelios-Restlet-Engine/1.1.10 
    ContentType: application/json;charset=UTF-8 
    ContentEncoding: gzip 
    Connection: close 
    X-Served-By: 85.111 
    HeaderEnd: CRLF 

Spodziewałem się zobaczyć Content-Length lub Transfer-Encoding, ale żaden z nich nie istnieje.

Przeczytałem HTTP-RFC, ale nadal nie jestem pewien.

@CodeCaster, czytałem rozdział RFC 4.4, ale nadal nie jestem jasne, jak widać, nagłówek odpowiedzi jest używany do powrotu strumienia json, więc:

  • sekcja 4.4 Zasada 1 definiuje NIE MOŻE zawierać ciała wiadomości, nie wydaje się, aby dotyczyło mojego przypadku.
  • sekcja 4.4, zasada 4, nie jestem tego pewien, ale ponieważ w nagłówku odpowiedzi nie widzę "wieloczęści/byterów" - czy to oznacza, że ​​ta reguła nie dotyczy mnie?
  • sekcja 4.4, zasada 5, jest to dla mnie niezrozumiałe, ponieważ nagłówek rzeczywiście zawiera "Połączenie: zamknij", czy jest powiązany?

Jakie są dalsze komentarze?

Odpowiedz

2

Tak, jest ważny. Istnieje pięć metod w celu ustalenia długości wiadomość:

RFC 2616 Section 4.4. Message Length:

Przeniesienie długości komunikatu jest długość komunikatu-ciało, pojawia się w komunikacie; oznacza to, że po zastosowaniu kodowania transferu zastosowano . Gdy wiadomość ciała jest zawarty w wiadomości przeniesienia długości tego ciała jest określona przez następujący (w kolejności pierwszeństwa)

  1. komunikacie odpowiedzi, które „nie powinno” obejmują treść wiadomości (taka jak jako odpowiedzi 1xx, 204 i 304 oraz każda odpowiedź na żądanie HEAD ) jest zawsze kończona przez pierwszą pustą linię po polach nagłówka , niezależnie od pól nagłówka jednostki znajdujących się w wiadomość.

  2. Jeśli pole nagłówka Transfer-Encoding (sekcja 14,41) i która ma wartość inną niż „identyczność”, a następnie przeniesienie długości jest określony za pomocą programu „pakietowego” przeniesienie kodowania (rozdział 3.6), , chyba że komunikat zostanie zakończony przez zamknięcie połączenia.

  3. Jeśli pole nagłówek Content-Length (§ 14,13) jest obecny, jego wartość dziesiętną w oktetach oznacza zarówno jednostki długości oraz transfer długości . Pole nagłówka Content-Length NIE MOŻE być wysyłane , jeśli te dwie długości są różne (tj., Jeśli obecne jest pole nagłówkowe Transfer-Encoding ). Jeśli wiadomość zostanie odebrana zarówno z polem nagłówkowym przesyłania nagłówka , jak iz polem nagłówka Content-Length, ten ostatni MUSI być zignorowany.

  4. Jeżeli komunikat wykorzystuje rodzaj materiału „wieloczęściowy/byteranges” oraz przeniesienie długości nie podano inaczej, to self typ nośnika ograniczające określa transferu długości. Ten typ nośnika: [M] UST NOT zostanie użyty, chyba że nadawca wie, że odbiorca może przeanalizować go pod kątem ; obecność w żądaniu nagłówka Range z wieloma bajtami- specyfikatorów zakresu z klienta 1.1 oznacza, że ​​klient może analizować odpowiedzi wieloczęściowe/byteranges.

    Nagłówek zakresu może być przekazywany przez serwer proxy 1,0, który nie rozpoznaje wieloprzekładni/opóźnień; w takim przypadku serwer MUSI ograniczać komunikat, używając metod zdefiniowanych w punktach 1.3 lub 5 z tej sekcji.

  5. Przez serwer zamykający połączenie. (Zamknięcie połączenia nie mogą być wykorzystane do wskazania końca ciała żądanie, ponieważ pozostawi żadnej możliwości serwera odesłać odpowiedź.)

+0

Czytałem sekcja RFC 4.4, ale nadal nie jest jasne, jak widzisz, nagłówek odpowiedzi jest używany do zwrócenia strumienia json, więc: - sekcja 4.4, reguła 1 definiuje NIE POWINIEN włączać treści wiadomości, nie wydaje się dotyczyć mojej sprawy. - sekcja 4.4, zasada 4, nie jestem tego pewien, ale ponieważ w nagłówku odpowiedzi nie widzę "wieloczęści/byterów" - czy to oznacza, że ​​ta reguła nie dotyczy mnie? - sekcja 4.4, zasada 5, jest to dla mnie niezrozumiałe, ponieważ nagłówek zawiera "Połączenie: zamknij", czy jest powiązany? Co dalej? dzięki! – user1721757

+4

@ user1721757 rule 1 ma zastosowanie tylko do wspomnianych kodów statusu. Otrzymasz 200 i istnieje nagłówek 'Connection: close', więc twój klient powinien czytać dalej, dopóki serwer nie zamknie połączenia. – CodeCaster

Powiązane problemy