Здесь я видел пару вопросов, таких как «Отладка сервисов RESTful» , в которых упоминается:
К сожалению, тот же браузер не позволяет мне проверять HTTP PUT, DELETE и, в некоторой степени, даже HTTP POST.
Я также слышал, что браузеры поддерживают только GET и POST из некоторых других источников, таких как:
- http://www.packetizer.com/ws/rest.html
- http://www.mail-archive.com/jmeter-user@jakarta.apache.org/msg13518.html
- http://www.xml.com/cs/user/view/cs_msg/1098
Тем не менее, несколько быстрых тестов в Firefox показывают, что отправка PUT
и DELETE
запросы работают должным образом - они XMLHttpRequest
успешно завершаются, и запрос отображается в журналах сервера с правильным методом. Есть ли какой-то аспект, который я пропускаю, например, совместимость с разными браузерами или неочевидные ограничения?
http
cross-browser
browser
ajax
Джон Милликин
источник
источник
Ответы:
Нет. Спецификация HTML 5 упоминает:
Т.е. формы HTML поддерживают только GET и POST как методы HTTP-запроса. Обходным путем для этого является туннелирование других методов через POST, используя скрытое поле формы, которое читается сервером, и запрос отправляется соответственно.
Тем не менее, GET , POST , PUT и DELETE будут поддержаны реализаций XMLHttpRequest (т.е. AJAX вызовы) во всех основных веб - браузеров (IE, Firefox, Safari, Chrome, Opera).
источник
HTML-формы поддерживают GET и POST. (HTML5 в какой-то момент добавил PUT / DELETE, но они были удалены.)
XMLHttpRequest поддерживает каждый метод, включая CHICKEN, хотя некоторые имена методов сопоставляются без учета регистра (методы чувствительны к регистру для HTTP), а некоторые имена методов вообще не поддерживаются по соображениям безопасности (например, CONNECT).
Браузеры постепенно сходятся по правилам, указанным в XMLHttpRequest, но, как указано в другом комментарии, все еще есть некоторые различия.
источник
XMLHttpRequest
является стандартным объектом в объектной модели JavaScript.Согласно Википедии, он
XMLHttpRequest
впервые появился в Internet Explorer 5 как объект ActiveX, но с тех пор превратился в стандарт и был включен для использования в JavaScript в семействе Mozilla с 1.0, Apple Safari 1.2, Opera 7.60-p1 и IE 7.0 ,open()
Метод на объекте принимает метод HTTP в качестве аргумента - и определяется как принимать любой допустимый метод HTTP (см пункт номер 5 канала связи) - в том числеGET
,POST
,HEAD
,PUT
иDELETE
, как и определено в RFC 2616 .В качестве дополнительного примечания IE 7–8 разрешают только следующие методы HTTP: «GET», «POST», «HEAD», «PUT», «DELETE», «MOVE», «PROPFIND», «PROPPATCH», «MKCOL» , «COPY», «LOCK», «UNLOCK» и «OPTIONS» .
источник
_method
Обход скрытого поляИспользуется в Rails и может быть адаптирован к любой среде:
добавьте скрытый
_method
параметр в любую форму, которая не является GET или POST:Это может быть сделано автоматически в рамках через вспомогательный метод создания HTML (например, Rails
form_tag
)исправить фактический метод формы в POST (
<form method="post"
)процессы
_method
на сервере и делают точно так, как если бы этот метод был отправлен вместо фактического POSTОбоснование / история того, почему это невозможно: /software/114156/why-there-are-no-put-and-delete-methods-in-html-forms
источник
Я полагаю, что эти комментарии относятся конкретно к браузерам, т. Е., Щелкая ссылки и отправляя формы, а не
XMLHttpRequest
.XMLHttpRequest
это просто пользовательский клиент , который вы писали в JavaScript , который использует браузер в качестве выполнения.ОБНОВЛЕНИЕ: Чтобы уточнить, я не имел в виду (хотя я действительно писал), что вы написали
XMLHttpRequest
; Я имел в виду, что вы написали код, который используетXMLHttpRequest
. Браузеры изначально не поддерживаютXMLHttpRequest
.XMLHttpRequest
происходит из среды выполнения JavaScript, которая может быть размещена в браузере, хотя это не обязательно (см. Rhino ). Вот почему люди говорят, что браузеры не поддерживаютPUT
и,DELETE
потому что на самом деле их поддерживает JavaScript.источник
it's actually JavaScript that is supporting them
, Не совсем правда.XMLHttpRequest
является «хост-объектом», что означает, что это объект, который предоставляет функциональность от хоста к коду Javascript. Это не часть самого JS.ДА , PUT, DELETE, HEAD и т. Д. HTTP-методы доступны во всех современных браузерах.
Чтобы быть совместимыми с XMLHttpRequest, браузеры уровня 2 должны поддерживать эти методы. Чтобы проверить, какие браузеры поддерживают XMLHttpRequest Level 2, я рекомендую CanIUse:
http://caniuse.com/#feat=xhr2
Только в Opera Mini отсутствует поддержка atm (juli '15), но в Opera Mini отсутствует поддержка для всего. :)
источник
Просто добавлю - Safari 2 и более ранние версии определенно не поддерживали PUT и DELETE. У меня сложилось впечатление, что 3 сделал, но я больше не могу его проверять. Safari 4 определенно поддерживает PUT и DELETE.
источник