2013-05-29 16 views
29

PUTとDELETEリクエストを「偽造」することを決めた多くのフレームワークが最近見られました。 Ruby on Railsのように。彼らはブラウザが追いつくのを待っているようだ。彼らは無駄に待っていますか?ブラウザでPUTとDELETEリクエストがサポートされないのはなぜですか?

これはどこにでも実装される予定ですか?

+1

'PUT'と' DELETE'セマンティクスが必要なブラウザレベルのアクションはどれですか? HTTPの 'PUT'アクションと' DELETE'アクションはプログラム的に生成できます。ただ、ブラウザでファイルをどのようにユーザに公開するのか想像できません。 – Gian

+0

これらはHTML5とAjaxリクエストでサポートされています。 – n1xx1

+0

@ N1xx1だからhtml5で私は

できますか?甘い。私はこれを調べます。 – pixelearth

答えて

53

ブラウザはサポートPUTDELETEを行うが、それはしていませんHTMLです。

たとえば、ブラウザではJavaScript(AJAX)経由でPUTリクエストが送信されますが、HTML <form>送信からは送信されません。

これは、HTML 4.01と最終的なW3C HTML 5.0仕様の両方で、form要素が許可すべき唯一のHTTPメソッドがGETとPOSTであるためです。

HTML5の開発中にこれについて多くの議論があり、ある時点でHTML5に追加され、再び削除されるだけです。追加のメソッドがHTML 5仕様から削除されたのは、HTML 4レベルのブラウザーがHTMLをサポートしないためです(作成時にHTMLの一部ではないため)。 JavaScriptシムなしでそうすることを許可する方法はありません。したがって、AJAXを使用することもできます。 method="PUT"またはmethod="DELETE"でフォームを使用しようとして

Webページは現在のすべてのブラウザのために戻って、デフォルトの方法、GETに下落するだろう。これにより、Webアプリケーションが意図したアクションのHTMLフォームに適切なメソッドを使用しようとする試みが中断され、結果として悪い結果が返されます。GETが削除されます! (ハロークローラ。ああ、おっと!私のデータベースがそこに行く)POSTにHTML <form>要素のデフォルトの方法を変更する

は(Moasicは* 1993年にフォームをデビューして以来、IMOデフォルトは常にPOSTされている必要があります)役立つだろうが、デフォルトを変更するには、インストールされたベースに浸透するのに少なくとも10年かかります。だから2つの言葉で: '遺産のために'。 。:-(

は、現在のブラウザをサポートするために、著者はそのHTMLで<input type=hidden name=_method value=DELETE>を含むことによって、私は著者が広くa知られている使用をお勧めしますオーバーライドでそれ偽物にb_method引数を持つことになります。(POSTにフォームメソッドを切り替えます要求が安全でないため)、次にサーバ側に_methodの認識を追加します。要求を変更して実際のDELETE要求であるかのように転送する必要があります。

webブラウザが究極のHATEOASクライアントである場合は、ne w状態をDELETE要求のために転送します。既存のAPIはそのような要求に対してしばしば204 No Contentを返します。代わりに、ユーザーがブラウザの状態を進めることができるように、リンク付きのハイパーメディア応答を返送する必要があります。

またこれらに類似/同一の質問に対する回答を参照してください。マーク・Aにより作成された


* Mosiac、また、 <img src=…>タグの複合ミスを紹介しました。これは <image source=…>fallback</image>であったはずです。

関連する問題