HTTP 1.0 vs 1.1

263

Czy ktoś mógłby dać mi krótki przegląd różnic między HTTP 1.0 a HTTP 1.1? Spędziłem trochę czasu z obydwoma RFC, ale nie byłem w stanie wyciągnąć dużej różnicy między nimi. Wikipedia mówi to:

HTTP / 1.1 (1997-1999)

Obecna wersja; trwałe połączenia są domyślnie włączone i działają dobrze z serwerami proxy. Obsługuje także potokowanie żądań, umożliwiając jednoczesne wysyłanie wielu żądań, umożliwiając serwerowi przygotowanie się do obciążenia i potencjalne szybsze przesłanie żądanych zasobów do klienta.

Ale to niewiele dla mnie znaczy. Zdaję sobie sprawę, że jest to dość skomplikowany temat, więc nie oczekuję pełnej odpowiedzi, ale czy ktoś może dać mi krótki przegląd różnic na nieco niższym poziomie?
Rozumiem przez to, że szukam informacji, które musiałbym wiedzieć, aby wdrożyć serwer HTTP lub aplikację. Głównie szukam szturchnięcia we właściwym kierunku, abym mógł sam to rozgryźć.

Jason Baker
źródło
To całkiem dobre podsumowanie kluczowych różnic: http://www.research.att.com/~bala/papers/h0vh1.html
Kev
3
Dobrze, że trafiłeś do źródła. Jeśli nie rozumiesz tego podsumowania, brzmi to tak, jakbyś nie wiedział dużo o sieci. Być może powinieneś również zbadać te warunki.
Marcin
4
Chociaż wciąż jestem nowicjuszem, jeśli chodzi o te rzeczy, moim głównym problemem jest to, że podsumowanie daje mi więcej „tego, co”, niż „jak”.
Jason Baker

Odpowiedzi:

363

Obsługa proxy i pole Host:

HTTP 1.1 ma wymagany nagłówek Hosta według specyfikacji.

HTTP 1.0 oficjalnie nie wymaga nagłówka hosta, ale dodanie go nie zaszkodzi, a wiele aplikacji (serwerów proxy) oczekuje, że zobaczy nagłówek hosta niezależnie od wersji protokołu.

Przykład:

GET / HTTP/1.1
Host: www.blahblahblahblah.com

Nagłówek ten jest przydatny, ponieważ pozwala przekierować wiadomość przez serwery proxy, a także dlatego, że Twój serwer internetowy może rozróżniać różne witryny na tym samym serwerze.

Oznacza to, że jeśli masz blahblahlbah.com i helohelohelo.com, oba wskazują na ten sam adres IP. Twój serwer internetowy może użyć pola Host, aby rozróżnić witrynę, której chce komputer kliencki.

Trwałe połączenia:

HTTP 1.1 pozwala także na utrzymywanie trwałych połączeń, co oznacza, że ​​możesz mieć więcej niż jedno żądanie / odpowiedź na tym samym połączeniu HTTP.

W HTTP 1.0 trzeba było otworzyć nowe połączenie dla każdej pary żądanie / odpowiedź. A po każdej odpowiedzi połączenie zostanie zamknięte. Doprowadziło to do pewnych dużych problemów z wydajnością z powodu powolnego startu TCP .

Metoda OPCJE:

HTTP / 1.1 wprowadza metodę OPTIONS. Klient HTTP może użyć tej metody do określenia możliwości serwera HTTP. Jest to najczęściej używane do udostępniania zasobów między źródłami w aplikacjach internetowych.

Buforowanie:

HTTP 1.0 obsługiwał buforowanie za pomocą nagłówka: If-Modified-Since.

HTTP 1.1 znacznie rozszerza obsługę buforowania, używając czegoś zwanego „znacznikiem encji”. Jeśli 2 zasoby są takie same, będą miały te same znaczniki encji.

HTTP 1.1 dodaje także warunkowe nagłówki If-Unmodified-Since, If-Match, If-None-Match.

Istnieją również dodatkowe dodatki związane z buforowaniem, takie jak nagłówek Cache-Control.

100 Kontynuuj status:

Nowy kod powrotu w HTTP / 1.1 100 Kontynuuj. Zapobiega to wysyłaniu przez klienta dużego żądania, gdy klient nie jest nawet pewien, czy serwer może przetworzyć żądanie lub jest upoważniony do przetworzenia żądania. W takim przypadku klient wysyła tylko nagłówki, a serwer powie klientowi 100 Kontynuuj, kontynuuj z treścią.

Wiele więcej:

  • Uwierzytelnianie szyfrowane i proxy
  • Dodatkowe nowe kody statusu
  • Kodowanie transferu fragmentarycznego
  • Nagłówek połączenia
  • Ulepszona obsługa kompresji
  • O wiele wiele więcej.
Brian R. Bondy
źródło
15
Zauważ, że wiele serwerów / serwerów proxy, którzy twierdzą, że chcą HTTP / 1.0, bardzo się zdenerwuje, jeśli pominiesz nagłówek Hosta.
Paul Tomblin,
2
HTTP 1.0 obsługuje kompresję za pomocą nagłówka Content-Encoding. Jak wspomniał Paul, zdecydowanie poleciłbym każdemu klientowi HTTP / 1.0 wysłanie nagłówka Hosta, ponieważ nie jest to absolutnie zabronione, a rzeczy będą częściej działać tak, jak się tego spodziewasz. W przeciwnym razie jest to martwe.
cpm
@Paul Tomblin: Dzięki, dodałem te informacje.
Brian R. Bondy
2
Odnośnie „jeśli masz blahblahlbah.com i helohelohelo.com, oba wskazują na ten sam adres IP. Twój serwer sieciowy może użyć pola Host, aby rozróżnić witrynę, którą chce komputer kliencki”. Co się dzieje, gdy klient HTTP 1.0 nie daje nam pola hosta do rozróżnienia?
Pacerier
@Pacerier zwykle to domyślna strona; to zależy od serwera.
Andrew Lambert
14

 HTTP 1.0 (1994)

  • Nadal jest w użyciu
  • Może być używany przez klienta, który nie może poradzić sobie z porcjami (lub skompresowanymi) odpowiedziami serwera

 HTTP 1.1 (1996-2015)

  • Formalizuje wiele rozszerzeń do wersji 1.0
  • Obsługuje trwałe i potokowe połączenia
  • Obsługuje przesyłanie fragmentów, kompresję / dekompresję
  • Obsługuje wirtualny hosting (serwer z jednym adresem IP obsługujący wiele domen)
  • Obsługuje wiele języków
  • Obsługuje transfery w bajtach; przydatne do wznowienia przerwanych transferów danych

HTTP 1.1 to rozszerzenie HTTP 1.0. Poniżej wymieniono cztery główne ulepszenia:

  1. Efektywne wykorzystanie adresów IP, umożliwiając obsługę wielu domen z jednego adresu IP.

  2. Szybsza odpowiedź, zezwalając przeglądarce internetowej na wysyłanie wielu żądań przez jedno trwałe połączenie.

  3. Szybsza odpowiedź dla stron generowanych dynamicznie dzięki obsłudze kodowania fragmentarycznego, co pozwala na wysłanie odpowiedzi zanim znana będzie jej całkowita długość.
  4. Szybsza reakcja i duże oszczędności przepustowości dzięki dodaniu obsługi pamięci podręcznej.
i_thamary
źródło
9

W przypadku prostych aplikacji (np. Sporadyczne pobieranie wartości temperatury z termometru z dostępem do Internetu) HTTP 1.0 jest odpowiedni zarówno dla klienta, jak i serwera. Możesz napisać klient HTTP lub serwer oparty na gołych kościach w około 20 wierszach kodu.

W przypadku bardziej skomplikowanych scenariuszy najlepszym rozwiązaniem jest HTTP 1.1. Spodziewaj się 3 do 5-krotnego wzrostu wielkości kodu w przypadku zawiłości bardziej złożonego protokołu HTTP 1.1. Złożoność pojawia się głównie, ponieważ w HTTP 1.1 trzeba będzie tworzyć, analizować i odpowiadać na różne nagłówki. Możesz chronić swoją aplikację przed złożonością, zmuszając klienta do korzystania z biblioteki HTTP lub serwera do korzystania z serwera aplikacji WWW.

Diomidis Spinellis
źródło
7

Kluczowym problemem kompatybilności jest obsługa trwałych połączeń . Niedawno pracowałem na serwerze, który „obsługiwał” HTTP / 1.1, ale nie udało się zamknąć połączenia, gdy klient wysłał żądanie HTTP / 1.0. Pisząc serwer obsługujący HTTP / 1.1, upewnij się, że działa on dobrze również z klientami obsługującymi tylko HTTP / 1.0.

Troy J. Farrell
źródło
8
Czy HTTP / 1.1 wymaga od nas zgodności HTTP / 1.0?
Pacerier
@Troy - Czy prawidłowe jest wysłanie odpowiedzi na żądanie HTTP 1.1, a następnie natychmiast zamknięcie połączenia (gniazdo, z którego żądanie zostało odczytane na serwerze)? Co praktycznie oznacza, że ​​serwer implementuje HTTP 1.0
Guy Avraham
5

Jedną z pierwszych różnic, które mogę sobie przypomnieć, jest wiele domen działających na tym samym serwerze, częściowe pobieranie zasobów, pozwala to na pobieranie i przyspieszenie pobierania zasobu (to robi prawie każdy akcelerator pobierania).

Jeśli chcesz stworzyć aplikację taką jak strona internetowa lub podobna, nie musisz się zbytnio przejmować różnicami, ale powinieneś znać różnicę między GETi POSTczasownikami.

Teraz, jeśli chcesz stworzyć przeglądarkę, to tak, musisz znać cały protokół, a także, jeśli próbujesz stworzyć serwer HTTP.

Jeśli interesuje Cię tylko znajomość protokołu HTTP, polecam zacząć od HTTP / 1.1 zamiast 1.0.

Leandro López
źródło
1
Methinks Jason już zna różnicę między GET i POST, jeśli rozważa zbudowanie własnego serwera HTTP / aplikacji od podstaw. :)
Kev
1
Właściwie to zrobiłem trochę pracy z serwerem WWW, który obecnie obsługuje tylko HTTP 1.0, zastanawiałem się, co jest związane z dodaniem obsługi 1.1.
Jason Baker
2

HTTP 1.1 to najnowsza wersja Hypertext Transfer Protocol, protokołu aplikacji WWW, który działa na pakiecie protokołów internetowych TCP / IP. w porównaniu do HTTP 1.0, HTTP 1.1 zapewnia szybsze dostarczanie stron internetowych niż oryginalny HTTP i zmniejsza ruch internetowy.

Ruch internetowy Przykład: Na przykład, jeśli uzyskujesz dostęp do serwera. W tym samym czasie tak wielu użytkowników uzyskuje dostęp do serwera danych, więc jest szansa na zawieszenie serwera. To jest ruch internetowy.

Krishna Mohan
źródło
1

HTTP 1.1 zawiera nagłówek hosta w specyfikacji, podczas gdy HTTP 1.0 oficjalnie nie ma nagłówka hosta, ale nie odmawia dodania go.

Nagłówek hosta jest przydatny, ponieważ pozwala klientowi skierować wiadomość przez serwer proxy, a główna różnica między wersjami HTTP 1.0 i 1.1 to:

  1. HTTP 1.1 zawiera trwałe połączenia, które definiują, że możemy mieć więcej niż jedno żądanie lub odpowiedź na to samo połączenie HTTP.
  2. podczas gdy w HTTP 1.0 musisz otworzyć nowe połączenie dla każdego żądania i odpowiedzi
  3. W HTTP 1.0 ma ona pragmę, podczas gdy w HTTP 1.1 ma kontrolę pamięci podręcznej, która jest podobna do pragmy
Niraj Kumar Jena
źródło
0

W porównaniu do 1.0, 1.1 zmniejsza ruch w sieci

Ram MVS
źródło