PUT、DELETE、HEAD などのメソッドはほとんどの Web ブラウザで利用できますか?
-
03-07-2019 - |
質問
ここで次のような質問がいくつかありました RESTful サービスをデバッグする方法, 、次のように言及しています。
残念ながら、その同じブラウザでは HTTP PUT、DELETE、さらには HTTP POST さえもある程度テストできません。
また、次のような他の情報源から、ブラウザは GET と POST のみをサポートしていると聞きました。
- http://www.packetizer.com/ws/rest.html
- http://www.mail-archive.com/jmeter-user@jakarta.apache.org/msg13518.html
- http://www.xml.com/cs/user/view/cs_msg/1098
ただし、Firefox でいくつかの簡単なテストを行ったところ、 PUT
そして DELETE
リクエストは期待どおりに機能します -- XMLHttpRequest
は正常に完了し、リクエストは正しい方法でサーバー ログに表示されます。ブラウザ間の互換性や明らかではない制限など、これに関して私が見逃している側面はありますか?
解決
いいえ。 HTML 5仕様の言及:
methodおよびformmethodコンテンツ属性は列挙属性です 次のキーワードと状態で:
キーワード get 、状態GETへのマッピング、HTTP GETを示す 方法。 GETメソッドは、データのリクエストと取得のみを行い、 他の効果はないはずです。
キーワード post 、州へのマッピング POST。HTTPPOSTメソッドを示します。 POSTメソッドはそれを要求します サーバーは、送信されるフォームのデータを処理します。 データベースにアイテムが追加され、新しいWebが作成される ページリソース、既存のページの更新、またはすべての 言及された結果。
キーワード dialog 、状態ダイアログへのマッピング、 フォームの送信は、ダイアログボックスを閉じることを目的としています。 フォームがある場合はそれ自体を見つけ、そうでなければ送信しません。
これらの属性の無効な値のデフォルトはGET状態です
つまりHTMLフォームは、HTTP要求メソッドとして GET および POST のみをサポートします。これを回避するには、サーバーによって読み取られる非表示フォームフィールドと、それに応じて送信される要求を使用して、POSTを介して他のメソッドをトンネリングします。
ただし、 GET 、 POST 、 PUT 、および DELETE は でサポートされていますすべての主要なWebブラウザー(IE、Firefox、Safari、Chrome、Opera)でのXMLHttpRequest(AJAX呼び出し)の実装。
他のヒント
HTMLフォームはGETおよびPOSTをサポートしています。 (HTML5は一時的にPUT / DELETEを追加しましたが、それらは削除されました。)
XMLHttpRequestはCHICKENを含むすべてのメソッドをサポートしますが、一部のメソッド名は大文字と小文字を区別せずに一致します(メソッドはHTTPごとに大文字と小文字を区別します)。 >
ブラウザはXMLHttpRequestで指定されたルールに徐々に収束していますが、他のコメントが指摘しているように、まだいくつかの違いがあります。
XMLHttpRequest
は、JavaScriptオブジェクトモデルの標準オブジェクトです。
Wikipediaによると、 open()
は、Internet Explorer 5で最初にActiveXオブジェクト。ただし、その後標準になり、1.0、Apple Safari 1.2、Opera 7.60-p1、およびIE 7.0以降、MozillaファミリのJavaScriptで使用するために含まれています。
オブジェクトのGET
メソッドは、HTTPメソッドを引数として受け取り、有効なHTTPメソッド(リンクの項目番号5を参照)として指定されます(POST
、HEAD
、<=を含む) >、PUT
およびDELETE
、 RFC 2616で指定。
これらのコメントは、ブラウザ、つまりリンクをクリックしてフォームを送信するものであり、XMLHttpRequest
ではないことを信じています。 PUT
は、ブラウザをランタイムとして使用するJavaScriptであなたが作成したカスタムクライアントです。
更新:明確にするために、 you が Rails で使用され、あらゆるフレームワークに適応できます。 隠し要素を追加する これは、HTML 作成ヘルパー メソッド (例:レール 実際のフォームメソッドを POST に修正します ( プロセス それが不可能である理由の根拠/履歴: https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-formsDELETE
を書いたという意味ではありません(書きましたが)。 <=>を使用するコードを書いたことを意味します。ブラウザは<=>をネイティブでサポートしていません。 <=>は、ブラウザによってホストされるJavaScriptランタイムから取得されますが、ブラウザでホストされる必要はありません(
_method
隠しフィールドの回避策
_method
パラメータを GET または POST 以外のフォームに追加します。<input type="hidden" name="_method" value="DELETE">
form_tag
)<form method="post"
)_method
サーバー上で、実際の POST の代わりにそのメソッドが送信されたかのように実行します。
YES 、PUT、DELETE、HEADなどのHTTPメソッドは、最新のすべてのブラウザーで使用できます。
XMLHttpRequestレベル2 ブラウザーに準拠する これらのメソッドをサポートしています。どのブラウザーがXMLHttpRequestレベル2をサポートしているかを確認するには、CanIUseをお勧めします。
Opera MiniのみがサポートATMを欠いています(juli '15)が、Opera Miniはすべてをサポートしていません。 :)
追加するだけ-Safari 2以前では、PUTおよびDELETEをサポートしていませんでした。私は3の印象を受けましたが、もうテストするためにそれを持ち合わせていません。 Safari 4は間違いなくPUTとDELETEをサポートします。