Ł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?
-
z metody, które mogą odbierać ładunki, jak je odbierają?
Doceniam wszystkie wkłady, gdybyś mógł podzielić się niektórymi (najlepiej lekkimi) lekturami, które również byłyby świetne!
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.
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.
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 .
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