Доступны ли методы PUT, DELETE, HEAD и т. Д. В большинстве веб-браузеров?

Я видел здесь пару вопросов, таких как Как отлаживать службы RESTful , в которых упоминается:

К сожалению, тот же браузер не позволяет мне тестировать HTTP PUT, DELETE и, в некоторой степени, даже HTTP POST.

Я также слышал, что браузеры поддерживают только GET и POST из некоторых других источников, таких как:

Однако, несколько быстрых тестов в Firefox показывают, что отправка PUT и DELETE запросов работает должным образом - XMLHttpRequest успешно завершается, и запрос отображается в журналах сервера с правильным методом. Есть ли какой-то аспект, который я пропускаю, например, кросс-браузерная совместимость или неочевидные ограничения?

вопрос задан 3.10.2008
John Millikin
151729 репутация

7 ответов


  • 434 рейтинг

    HTML-формы (до HTML версии 4 и XHTML 1) поддерживают только GET и POST в качестве методов HTTP-запроса. Обходным путем для этого является туннелирование других методов через POST с использованием скрытого поля формы, которое читается сервером, и запрос отправляется соответственно.

    Однако GET , POST , PUT и DELETE поддерживаются реализациями XMLHttpRequest (i. е. AJAX звонки) во всех основных веб-браузерах (IE, Firefox, Safari, Chrome, Opera).

    ответ дан Matthew Murdoch, с репутацией 19857, 3.10.2008
  • 75 рейтинг

    HTML-формы поддерживают GET и POST. (HTML5 в какой-то момент добавил PUT / DELETE, но они были удалены. )

    XMLHttpRequest поддерживает каждый метод, включая CHICKEN, хотя некоторые имена методов сопоставляются без учета регистра (методы чувствительны к регистру для HTTP), а некоторые имена методов вообще не поддерживаются по соображениям безопасности (например, г. CONNECT).

    Браузеры медленно сходятся по правилам, указанным в XMLHttpRequest, но, как указано в другом комментарии, все еще есть некоторые различия.

    ответ дан Anne, с репутацией 3438, 5.10.2008
  • 40 рейтинг

    XMLHttpRequest - это стандартный объект в объектной модели JavaScript.

    Согласно Википедии, XMLHttpRequest впервые появился в Internet Explorer 5 как объект ActiveX, но с тех пор превратился в стандарт и был включен для использования в JavaScript в семействе Mozilla с 1 года. 0, Apple Safari 1. 2, Опера 7. 60-р1 и 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 ".

    ответ дан Vihung, с репутацией 5626, 3.10.2008
  • 15 рейтинг

    Я считаю, что эти комментарии относятся конкретно к браузерам, т.е. е. , нажав на ссылку и отправив форму, не XMLHttpRequest. XMLHttpRequest - это просто пользовательский клиент, который вы написал в JavaScript, который использует браузер как среду выполнения.

    ОБНОВЛЕНИЕ: Чтобы уточнить, я не имел в виду (хотя я написал), что вы написал XMLHttpRequest; Я имел в виду, что вы написали код, который использует XMLHttpRequest. Браузеры изначально не поддерживают XMLHttpRequest. XMLHttpRequest происходит из среды выполнения JavaScript, которая может быть размещена в браузере, хотя это не обязательно (см. Rhino ). Вот почему люди говорят, что браузеры не поддерживают PUT и DELETE, потому что на самом деле их поддерживает JavaScript.

    ответ дан Hank Gay, с репутацией 50912, 3.10.2008
  • 13 рейтинг

    _method обходной путь скрытого поля

    Используется в Rails и может быть адаптирован к любой структуре:

    • добавить скрытый параметр _method в любую форму, которая не является GET или POST:

      
      

      Это можно сделать автоматически в рамках через вспомогательный метод создания HTML (например, г. Рельсы form_tag)

    • исправить фактический метод формы в POST (

      )
    • обрабатывает _method на сервере и делает точно так, как если бы этот метод был отправлен вместо фактического POST

    Обоснование / история того, почему это невозможно: https: // softwareengineering. stackexchange. ru / questions / 114156 / «почему нет никаких методов размещения и удаления в html-формах»

    ответ дан Ciro Santilli 新疆改造中心 六四事件 法轮功, с репутацией 124156, 12.11.2014
  • 8 рейтинг

    Просто для добавления - Safari 2 и более ранние версии определенно не поддерживали PUT и DELETE. У меня сложилось впечатление, что 3 сделал, но у меня больше нет возможности его проверять. Safari 4 определенно поддерживает PUT и DELETE.

    ответ дан jharlap, с репутацией 710, 31.07.2009
  • 7 рейтинг

    ДА , PUT, DELETE, HEAD и т. Д. Методы HTTP доступны во всех современных браузерах.

    Для совместимости с XMLHttpRequest Level 2 браузеры должны поддерживать эти методы . Чтобы проверить, какие браузеры поддерживают XMLHttpRequest Level 2, я рекомендую CanIUse:

    http: // caniuse. com / # feat = xhr2

    Только в Opera Mini отсутствует поддержка atm (juli '15), но в Opera Mini отсутствует поддержка для всего. :)

    ответ дан Stijn de Witt, с репутацией 18012, 21.07.2015