Czy metody PUT, DELETE, HEAD itp są dostępne w większości przeglądarek internetowych?
Widziałem kilka pytań wokół tutaj Jak debugować usługi RESTful , który wspomina:
Niestety ta sama przeglądarka nie pozwala mi przetestować HTTP PUT, DELETE, a do pewnego stopnia nawet HTTP POST.
Słyszałem też, że przeglądarki obsługują tylko GET I POST, z niektórych innych źródeł like:
- http://www.packetizer.com/ws/rest.html
- http://www.mail-archive.com/[email protected]/msg13518.html
- http://www.xml.com/cs/user/view/cs_msg/1098
Jednak kilka szybkich testów w Firefoksie pokazuje, że wysyłanie żądań PUT
i DELETE
działa zgodnie z oczekiwaniami -- XMLHttpRequest
kończy się pomyślnie, a żądanie pojawia się w logach serwera przy użyciu odpowiedniej metody. Czy jest w tym jakiś aspekt? brakujące, takie jak kompatybilność między przeglądarkami lub nieoczywiste ograniczenia?
7 answers
Formularze HTML (do wersji HTML 4 i XHTML 1) obsługują tylko GETi POST jako metody żądania HTTP. Obejściem tego problemu jest tunelowanie innych metod przez POST za pomocą ukrytego pola formularza, które jest odczytywane przez serwer i odpowiednio wysyłane żądanie.
Jednak GET, POST, PUT and DELETE są obsługiwane przez implementacje XMLHttpRequest (tj. wywołania AJAX) we wszystkich głównych przeglądarkach internetowych (IE, Firefox, Safari, Chrome, Opera).
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
2015-05-12 19:01:12
Formularze HTML obsługują GET I POST. (HTML5 w pewnym momencie dodano PUT / DELETE, ale te zostały porzucone.)
XMLHttpRequest obsługuje wszystkie metody, w tym CHICKEN, chociaż niektóre nazwy metod są dopasowane do wielkości liter (metody są rozróżniane na wielkość liter na HTTP), a niektóre nazwy metod nie są w ogóle obsługiwane ze względów bezpieczeństwa (np. CONNECT).
Przeglądarki powoli zbliżają się do reguł określonych przez XMLHttpRequest, ale jak zauważył inny komentarz, nadal istnieją pewne różnice.
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
2010-10-27 13:35:33
XMLHttpRequest
jest standardowym obiektem w modelu obiektowym JavaScript.
Według Wikipedii, XMLHttpRequest
po raz pierwszy pojawił się w Internet Explorer 5 jako obiekt ActiveX, ale od tego czasu został przekształcony w standard i został włączony do użytku w JavaScript w rodzinie Mozilli od 1.0, Apple Safari 1.2, Opera 7.60-p1 i IE 7.0.
Metoda open()
na obiekcie przyjmuje metodę HTTP jako argument - i jest określona jako przyjmująca dowolną poprawną metodę HTTP (patrz pozycja numer 5 linku) - w tym GET
, POST
, HEAD
, PUT
i DELETE
, zgodnie z określonym przez RFC 2616.
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
2018-07-11 13:35:21
Uważam, że te komentarze odnoszą się konkretnie do przeglądarek, tj. klikania linków i przesyłania formularzy, a nie XMLHttpRequest
. XMLHttpRequest
jest po prostu niestandardowym klientem, któryty napisał w JavaScript, który używa przeglądarki jako środowiska uruchomieniowego.
UPDATE: dla wyjaśnienia, nie miałem na myśli (choć napisałem), że ty napisałeś XMLHttpRequest
; chodziło mi o to, że napisałeś kod, który używa XMLHttpRequest
. Przeglądarki nie obsługują natywnie XMLHttpRequest
. XMLHttpRequest
pochodzi z środowiska uruchomieniowego JavaScript, które może być hostowane przez przeglądarkę, chociaż nie jest to wymagane (patrz Rhino). Dlatego ludzie mówią, że przeglądarki nie obsługują PUT
i DELETE
- ponieważ to właśnie JavaScript je wspiera.
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
2008-10-27 18:07:44
_method
hidden field workaround
Używany w Rails i może być dostosowany do każdego frameworka:
-
Dodaj Ukryty parametr
_method
do dowolnego formularza, który nie jest GET lub POST:<input type="hidden" name="_method" value="DELETE">
Można to zrobić automatycznie w frameworkach za pomocą metody HTML creation helper (np. Rails
form_tag
) Napraw rzeczywistą metodę formularza, aby opublikować (
<form method="post"
)-
Procesy
_method
na serwerze i robią dokładnie tak, jakby ta metoda została wysłana zamiast z aktualnego posta
Uzasadnienie / historia dlaczego nie jest to możliwe: https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms
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
2018-08-24 07:17:56
Tylko dodać-Safari 2 i wcześniej zdecydowanie nie obsługiwało PUT and DELETE. Mam wrażenie, że 3 tak, ale nie mam go już do testowania. Safari 4 zdecydowanie obsługuje PUT and DELETE.
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
2009-07-31 14:39:13
Metody HTTP Yes, PUT, DELETE, HEAD itp.są dostępne we wszystkich nowoczesnych przeglądarkach.
Aby być zgodnym z XMLHttpRequest Level 2 przeglądarki muszą obsługiwać te metody. Aby sprawdzić, które przeglądarki obsługują XMLHttpRequest Level 2 polecam CanIUse:
Tylko Opera Mini nie obsługuje atm (juli '15), ale Opera Mini nie obsługuje wszystkiego. :)
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
2015-07-21 20:52:42