Подтвердить что ты не робот

Есть ли причина не использовать HTTP PUT и DELETE в веб-приложении?

Оглядываясь, я не могу назвать одно веб-приложение (а не веб-сервис), которое использует что-либо помимо запросов GET и POST. Есть ли конкретная причина для этого? Некоторые браузеры (или серверы) не поддерживают другие типы запросов? Или это только по историческим причинам? Я хотел бы использовать запросы PUT и DELETE, чтобы сделать мою жизнь немного легче на стороне сервера, но я неохотно, потому что никто другой не делает.

4b9b3361

Ответ 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.