Ładunki metod żądań HTTP

Wpis w Wikipedii NA HTTP wymienia następujące metody żądania HTTP:

  • HEAD: prosi o odpowiedź identyczną z tą, która odpowiadałaby żądaniu GET, ale bez ciała odpowiedzi.
  • GET: żąda reprezentacji określonego zasobu.
  • POST: przesyła dane do przetworzenia (np. z formularza HTML) do zidentyfikowanego zasobu. Dane zawarte są w treści Prośba.
  • PUT: przesyła reprezentację określonego zasobu.
  • DELETE: usuwa określony zasób.
  • TRACE: odbija otrzymane żądanie, aby klient mógł zobaczyć, jakie (jeśli w ogóle) zmiany lub uzupełnienia zostały wprowadzone przez serwery pośrednie.
  • OPTIONS: zwraca metody HTTP, które serwer obsługuje dla podanego adresu URL. Może to być użyte do sprawdzenia funkcjonalności serwera www poprzez żądanie " * " zamiast konkretny zasób.
  • CONNECT: konwertuje połączenie żądania do przezroczystego tunelu TCP/IP, zwykle w celu ułatwienia komunikacji szyfrowanej SSL (HTTPS) przez niezaszyfrowany serwer proxy HTTP.
  • PATCH: jest używany do wprowadzania częściowych modyfikacji do zasobu.

Interesuje mnie wiedza (konkretnie o pierwszych pięciu metodach):

  • które z tych metod są w stanie (przypuszczać?) odbieraj ładunki
    • z metody, które mogą odbierać ładunki, jak je odbierają?
      • poprzez łańcuch zapytań w adresie URL?
      • poprzez kodowane URL ciało?
      • przez surowe / chunked body?
      • poprzez połączenie ([wszystkie / niektóre] z) powyższych?

Doceniam wszystkie wkłady, gdybyś mógł podzielić się niektórymi (najlepiej lekkimi) lekturami, które również byłyby świetne!

Author: Alix Axel, 2011-05-06

3 answers

RFC 7231 , HTTP 1.1 semantyka i treść, jest najbardziej aktualnym i autorytatywnym źródłem semantyki metod HTTP. Ta specyfikacja mówi, że nie ma zdefiniowanego znaczenia ładunku, który może być zawarty w wiadomości GET, HEAD, OPTIONS lub CONNECT. Sekcja 4.3.8 mówi, że Klient nie może wysyłać ciała do żądania śledzenia. Tak więc tylko TRACE nie może mieć ładunku, ale GET, HEAD, OPTIONS I CONNECT prawdopodobnie nie będą, a serwer nie powinien wiedzieć, jak sobie z tym poradzić, jeśli klient wysyła jeden (co oznacza, że może go zignorować).

Jeśli uważasz, że cokolwiek jest niejednoznaczne, istnieje Lista dyskusyjna, na której możesz wyrazić swoje obawy.

 28
Author: Darrel Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-08 21:48:27

Oto podsumowanie z RFC 7231, zaktualizowanej wersji linku @ Darrel wysłany:

  • HEAD - Brak zdefiniowanej semantyki ciała.
  • GET - Brak zdefiniowanej semantyki ciała.
  • PUT - body supported.
  • POST - body supported.
  • DELETE - Brak zdefiniowanej semantyki ciała.
  • TRACE - Body not supported.
  • OPTIONS - body obsługiwane, ale nie semantyka użycia (może w przyszłości).
  • CONNECT - Brak zdefiniowanej semantyki ciała

Jak @ John również wspomniano, wszystkie metody żądania obsługują ciągi zapytań w URL (jednym zauważalnym wyjątkiem mogą być opcje, które wydają się być przydatne [w moich testach], jeśli adres URL to HOST/*).

Nie testowałem metodCONNECT iPATCH , ponieważ nie interesują mnie one.

 83
Author: Alix Axel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:16

Jestem prawie pewien, że nie jest jasne, czy żądania GET mogą mieć ładunki. GET requests zazwyczaj wysyłają dane formularza za pośrednictwem ciągu zapytania, tak samo w przypadku HEAD requests. Głowa jest zasadniczo GET-tyle, że nie chce ciała odpowiedzi.

(uwaga na marginesie: mówię, że nie jest to jasne, ponieważ żądanie GET może technicznie uaktualnić do innego protokołu; w rzeczywistości, wersja websockets zrobiła to właśnie, i podczas gdy niektóre oprogramowanie proxy działało dobrze z nim, inne uścisk dłoni.)

POST generalnie ma ciało. Nic nie powstrzymuje cię przed używaniem ciągu zapytania, ale ciało posta zazwyczaj zawiera dane formularza w poście.

Aby uzyskać więcej (i bardziej szczegółowe) informacje, uderzyłbym w rzeczywiste HTTP/1.1 specs .

 3
Author: John Chadwick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-06 01:31:19