web-dev-qa-db-ja.com

最新のブラウザがPUTおよびDELETEフォームメソッドをサポートしていないのはなぜですか?

最新のアプリの1つにRESTfulAPIを構築し終えたところです。また、リソースを列挙し、編集、作成、削除などを行うための単純なフォームとテーブルを構築する、単純な管理インターフェイスのスキャフォールディングクラスも構築しました。

リソースを更新および削除するために、クラスは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="[email protected]" />
<input type="submit" value="Update" />
</form>

とてもシンプルです。 Javascriptが検出されると、フォームをインターセプトし、XMLHTTPRequestを使用して送信します。 Javascriptは他のHTTPメソッドをサポートしていますが、最近のブラウザーがPUTメソッドとDELETEメソッドをサポートしていないのはなぜですか?最終的にGETを送信します。

アプリが標準のHTMLに正常にフォールバックするときに、クラスで非表示のフィールドとそのロジックを使用する代わりに、同じメソッドを使用することをお勧めします。さらに悪いことに、メソッドをURIに配置して、GETを機能させることもできます。 。

開発者はGETをハッキングするかPOSTを使用して回避しているだけなので、ブラウザが他のHTTPメソッドをサポートしない理由は考えられません。

答えを検索したところ、 XHTML 2.0仕様 の一部として指定されているものを見つけることができました。それについての言及はありません HTML5仕様で

「HTML5準拠」ブラウザでサポートされていない理由はありますか?このバックアップを開いてブラウザに実装するためのリクエストをどこに投稿できますか?

34
nikcub

一部のWebフレームワーク(例:RailsのRuby)は、「実際の」メソッドの値を含むフォームに非表示の_methodパラメーターを含めることでこれを回避します。例:

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

次に、フレームワークは、処理する前にサーバー側で要求を書き換えて、HTTPメソッドとして_methodパラメーターの値を使用します。

これがあなたを助けるかどうかわからない。

19
Jonathan

HTML 4.01は、投稿と取得のみをサポートしています。 http://www.w3.org/TR/html4/interact/forms.html#h-17. を参照してください。他のHTML仕様については不明です。

8
Harri

実際、私はごく少量の調査を行い、他のStackexchangeフォーラムでこの回答を見つけました。

リンクを投稿するのは良い答えではないことは知っていますが、正確な答えはわかりません。だから、それはあなたがあなたの疑問を解決することができる唯一の方法です。

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

7
Akshit Zaveri