Должны ли PUT и DELETE использоваться в формах?
Предполагая, что мое веб-приложение полностью поддерживает PUT и DELETE на стороне сервера, я должен использовать их?
В основном мой вопрос заключается в том, сколько браузеров поддерживают это:
<form method="PUT">
или же
<form method="DELETE">
Есть ли какие-либо преимущества в использовании этих двух методов HTTP, кроме того, что они соответствуют REST? (при условии, что замена для этих двух методов является обычно используемым POST)
6 ответов
Ваш вопрос включает в себя два тесно связанных, но отдельных стандарта, HTTP и HTML. Методы PUT и DELETE являются частью HTTP. В HTTP они явно используются в интерфейсах RESTful и других сервисах, основанных на HTTP, таких как Webdav.
HTML до версии 4 определяет только использование POST и GET для форм. HTML5 в это время выглядит так, как будто он может поддерживать дальнейшие методы. [примечание, поддержка не включена в текущую версию w3]
Любая текущая поддержка браузера (я не знаю об этом напрямую) будет очень ограниченной и будет действительно полезна только в качестве эксперимента на переднем крае.
GET, POST, PUT и DELETE (есть другие) являются частью стандарта HTTP, но в настоящее время вы ограничены GET и POST в формах HTML.
Как упоминал Эндрю, вы можете использовать PUT и DELETE в AJAX-запросах; однако это работает только в некоторых браузерах (см. http://api.jquery.com/jQuery.ajax/).
Не только GET
& POST
действительные значения для method
приписывать. См. Спецификацию HTML5 для получения дополнительной информации.
Я считаю, что вы можете использовать их в AJAX-запросах.
По состоянию на февраль 2023 года последние спецификации и черновики HTML по умолчанию по-прежнему не поддерживают другие методы, кроме GET и POST. Если вы не используете промежуточное программное обеспечение метода, вы застряли с этими двумя вариантами. (атрибут метода также может иметь значение «диалог», но это не имеет значения, поскольку не имеет прямого отношения к методам HTTP.)
На самом деле невозможно отправить запрос DELETE, используя<form />
, но вы можете отправить его на одну конечную точку API и перенаправить пользователя на другую страницу. Это будет имитировать желаемое поведение. Предоставляется код с jQuery.
Другие объяснили это хорошо, но вы можете посетить этот ответ на Github для получения дополнительных объяснений.
Вероятно, нет, поскольку это значительно усложнило бы модель обработки. В частности, те же исключения из политики происхождения
<form>
сегодня не позволяют использовать эти методы. Либо мы должны запретить их в запросах между источниками, либо каким-то образом потребовать CORS. Оба эти ограничения будут первыми для навигации и довольно рискованными.