Оглядываясь, я не могу назвать одно веб-приложение (а не веб-сервис), которое использует что-либо помимо запросов GET и POST. Есть ли конкретная причина для этого? Некоторые браузеры (или серверы) не поддерживают другие типы запросов? Или это только по историческим причинам? Я хотел бы использовать запросы PUT и DELETE, чтобы сделать мою жизнь немного легче на стороне сервера, но я неохотно, потому что никто другой не делает.
Есть ли причина не использовать HTTP PUT и DELETE в веб-приложении?
Ответ 1
На самом деле большое количество людей использует PUT и DELETE, в основном для не-браузерных API. Некоторые примеры: Протокол публикации Atom и API данных Google Data:
Кроме того, вы не видите PUT/DELETE в общем использовании, поскольку большинство браузеров не поддерживают PUT и DELETE через Forms. Кажется, что HTML5 фиксирует это:
Как это работает для приложений браузера: люди разрабатывают RESTful-приложения с PUT и DELETE, а затем "туннелируют" эти запросы через POST из браузера. Например, см. Этот вопрос SO о том, как Ruby on Rails выполняет это с помощью скрытых полей:
Итак, вы не будете сами разрабатывать свое приложение с большим набором глаголов HTTP.
EDIT: Кстати, если вам интересно, почему PUT/DELETE отсутствуют в сообщениях на основе браузера, у них нет реальной хорошей технической причины. Чтение этой темы в списке рассылки rest-discuss, особенно комментарии Роя Филдинга, интересно для некоторого контекста:
EDIT: Есть несколько комментариев о том, поддерживают ли библиотеки AJAX все методы. Это сводится к фактической реализации браузера XMLHttpRequest. Я думал, что кто-то может найти эту ссылку, которая проверяет ваш браузер, чтобы увидеть, насколько совместим объект HttpRequest с различными параметрами HTTP.
К сожалению, я не знаю ссылки, которая собирает эти результаты.
Ответ 2
Проще говоря, HTML 4.01 form
element позволяет только значения < POST
"и" GET
" в своем method
Ответ 3
Некоторые прокси-серверы с жесткими политиками безопасности могут отказаться от них. Я использую PUT и DELETE в любом случае.
Ответ 4
Я читал, что некоторые браузеры не поддерживают другие HTTP-методы должным образом, хотя я не могу назвать никаких особенностей.
Rails, в частности, упакует ваши формы с помощью параметра метода, чтобы явно установить это, даже если браузер не поддерживает эти методы. Это кажется разумной предосторожностью, если вы собираетесь это сделать.
Ответ 5
Я использую все функции HTTP, браузеры будут прокляты, lol. Возможно, это будет способствовать более полному и правильному использованию протокола HTTP, продвигающегося вперед. Там больше происходит в сети, чем просто POST и GET. О времени реализации браузера отразилось это.
Ответ 6
Это зависит от вашего браузера и библиотеки Ajax. Например jQuery поддерживает все HTTP-методы, даже если браузер не может. См., Например, jQuery "ajax" документация по атрибуту type.
Restlet Ядро Java позволяет туннелировать запросы PUT и DELETE с помощью операций HTML POST. Для этого просто добавьте метод = put или method = delete в строку запроса URI, например:
http://www.example.com/user=xyz?method=delete ...
Это то же самое, что и подход Ruby on Rails (как описано в разделе @ars выше).
Ответ 7
Лично я действительно не вижу смысла использовать PUT или DELETE в веб-приложении. Все операции, выполняемые приложением, считываются или записываются, также как входной вывод. Почему вам нужно различать характер операции в заголовке HTTP-запроса? Я мог бы сделать ajax-вызовы с тем же URL-адресом формы /object/object _id и выполнять несколько операций, таких как удаление, обновление, получение значения или создание. Просто взглянув на URL-адрес, я понятия не имею, какой он есть. Используя только GET и POST, мои URL-адреса будут:
/объект/идентификатор/удалить
/объект/идентификатор/создать
/объект/идентификатор/обновление
/object/id → подразумевается GET
и др.
Основываясь на моем ограниченном опыте, во многих случаях это намного более чистое, чем скрытые типы запросов заголовков. Я не говорю, что никогда не следует использовать PUT или DELETE, просто говоря, используйте их, только если это абсолютно необходимо.
Обратитесь к "RESTful Web API" Леонарда Ричардсона, чтобы узнать больше о различных вариантах использования и соглашениях относительно методов HTTP-запросов в веб-среде RESTful.