Должны ли 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.)

https://html.spec.whatwg.org/#attr-fs-метод

На самом деле невозможно отправить запрос DELETE, используя<form />, но вы можете отправить его на одну конечную точку API и перенаправить пользователя на другую страницу. Это будет имитировать желаемое поведение. Предоставляется код с jQuery.

Другие объяснили это хорошо, но вы можете посетить этот ответ на Github для получения дополнительных объяснений.

Вероятно, нет, поскольку это значительно усложнило бы модель обработки. В частности, те же исключения из политики происхождения<form>сегодня не позволяют использовать эти методы. Либо мы должны запретить их в запросах между источниками, либо каким-то образом потребовать CORS. Оба эти ограничения будут первыми для навигации и довольно рискованными.

Другие вопросы по тегам