Почему современные браузеры не поддерживают методы форм PUT и DELETE? - PullRequest
32 голосов
/ 03 марта 2011

Я только что закончил создание RESTful API для одного из моих последних приложений.Я также создал простой класс scaffolding для интерфейса администратора, который будет перечислять ресурсы и создавать простые формы и таблицы для редактирования, создания, удаления и т. Д.

Для обновления и удаления ресурсов класс выводит форму с методами PUT и DELETE.Довольно просто:

<form action="/posts/xxxxxxx" method="DELETE">
<input type="submit" value="Delete" />
</form>

и

<form action="/posts/xxxxxxx" method="PUT">
<input type="text" name="username" value="nikcub" />
<input type="text" name="fullname" value="Nik Cubrilovic" />
<input type="text" name="email" value="nikcub@email.com" />
<input type="submit" value="Update" />
</form>

Очень просто.Если Javascript обнаружен, он будет перехватывать форму и использовать XMLHTTPRequest для отправки обратно.Javascript поддерживает другие методы HTTP, но почему современные браузеры не поддерживают методы PUT и DELETE?Это заканчивается отправкой GET.

Я бы предпочел, чтобы, когда приложение изящно возвращается к стандартному HTML, использовались те же методы, вместо того, чтобы использовать скрытые поля и логику для этого в классе, или, что еще хуже, помещать метод вURI и разрешение работы GET.

Я не могу придумать каких-либо причин, по которым браузеры не поддерживают другие методы HTTP, поскольку разработчики все равно обходят его, взламывая GET или используя POST.

Я искал ответ и смог найти его, указанный как часть спецификации XHTML 2.0 .Нет никакого упоминания об этом в спецификации HTML5 .

Есть ли причина, по которой он не поддерживается в браузерах, совместимых с HTML5?Где я могу опубликовать запрос, чтобы открыть эту резервную копию и реализовать ее в браузерах?

Ответы [ 3 ]

19 голосов
/ 20 марта 2011

Некоторые веб-фреймворки (например, Ruby on Rails) позволяют обойти это, включив в форму скрытый параметр _method со значением «фактического» метода, например:

<form action="/posts/xxxxx" method="POST">
    <input type="hidden" name="_method" value="DELETE">
    <input type="submit" value="delete">
</form>

.перед обработкой переписывает запрос на стороне сервера, чтобы использовать значение параметра _method в качестве метода HTTP.

Не знаю, поможет ли это вам.

8 голосов
/ 03 марта 2011

HTML 4.01 поддерживает только отправку и получение, см. http://www.w3.org/TR/html4/interact/forms.html#h-17.3 Не уверен насчет других спецификаций HTML.

6 голосов
/ 29 октября 2013

На самом деле я провел очень небольшое исследование и нашел этот ответ на другом форуме Stackexchange.

Я знаю, что публиковать ссылку не очень хороший ответ, но я не знаю точного ответа. Таким образом, это единственный способ решить ваши сомнения.

https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms

...