RESTfulサービスをデバッグする方法 のように、ここにいくつか質問があります。
残念ながら、同じブラウザでHTTP PUT、DELETE、そしてある程度HTTP POSTさえテストできません。
私はまた、ブラウザはGETとPOSTのみをサポートしていると聞いた。
しかし、Firefoxでのいくつかの簡単なテストでは、PUT
およびDELETE
リクエストの送信が期待どおりに機能し、XMLHttpRequest
が正常に完了し、リクエストが正しい方法でサーバーログに表示されることを示しています。 。これには、ブラウザ間の互換性や明白でない制限など、欠けている点がいくつかありますか?
いいえ。 HTML 5の仕様 には次のように記載されています。
Methodおよびformmethodコンテンツ属性は、次のキーワードと状態を持つ列挙型属性です。
キーワードGETget、状態GETへのマッピング。HTTPGETメソッドを示します。 GETメソッドは、データを要求および取得するだけで、他の効果はありません。
POST(---)というキーワードpost。HTTPPOSTメソッドを示します。 POSTメソッドは、送信されたフォームのデータの処理をサーバーに許可するように要求します。これにより、アイテムがデータベースに追加され、新しいWebページリソースが作成され、既存ページが更新されます。または上記のすべての結果。
状態ダイアログにマッピングするキーワードdialog。フォームを送信すると、フォームが見つかった場合にダイアログボックスを閉じ、それ以外の場合は送信しないことを示します。
これらの属性のデフォルトの無効値はGET状態です。
すなわちHTMLフォームはHTTPリクエストメソッドとしてGETとPOSTのみをサポートします。これを回避するには、サーバーによって読み取られる隠しフォームフィールドを使用してPOSTを介して他のメソッドをトンネリングし、それに応じて要求をディスパッチします。
ただし、GET、POST、PUT、 DELETEは、すべての主要WebブラウザにおけるXMLHttpRequestの実装(つまりAJAX呼び出し)でサポートされています( IE、Firefox、Safari、Chrome、Opera).
HTMLフォームはGETとPOSTをサポートしています。 (HTML5では、ある時点でPUT/DELETEが追加されましたが、それらは削除されました。)
XMLHttpRequestはCHICKENを含むすべてのメソッドをサポートしますが、一部のメソッド名は大文字と小文字を区別しないで照合され(HTTPでは各メソッドは大文字と小文字が区別されます)、セキュリティ上の理由でまったくサポートされないメソッドもあります(CONNECT).
ブラウザはXMLHttpRequestで指定された規則にゆっくりと収束していますが、他のコメントが指摘しているようにまだいくつかの違いがあります。
XMLHttpRequest
は、JavaScriptオブジェクトモデルの標準オブジェクトです。
ウィキペディアによると、 XMLHttpRequest
は最初にActiveXオブジェクトとしてInternet Explorer 5に登場しましたが、それ以降は標準になり、1.0以来MozillaファミリーのJavaScriptでの使用に含まれるようになりました。 1.2、Opera 7.60-p1、およびIE 7.0。
オブジェクトのopen()
メソッド は引数としてHTTPメソッドを取ります - そしてGET
、POST
、HEAD
を含む任意の有効なHTTPメソッドを取ることとして指定されます(リンクの項目番号5を参照) PUT
およびDELETE
。RFC 2616で指定された。
_method
隠しフィールドの回避策
Railsで使われており、どんなフレームワークにも適応できます。
gETまたはPOST以外のフォームに隠し_method
パラメータを追加します。
<input type="hidden" name="_method" value="DELETE">
これはフレームワークの中でHTML作成ヘルパーメソッド(例えばRails form_tag
)を通して自動的に行うことができます。
実際のフォームメソッドをPOST(<form method="post"
)に修正
サーバー上で_method
を処理し、実際のPOSTの代わりにそのメソッドが送信された場合とまったく同じように処理します。
それが不可能な理由の根拠/歴史: https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in -html-forms
私はそれらのコメントが特にXMLHttpRequest
name__ではなくブラウザを参照する、すなわちリンクをクリックしてフォームを送信することを信じると思います。 XMLHttpRequest
name__は、ブラウザをランタイムとして使用するyouが記述したカスタムクライアントです。
更新:明確にするために、(=書いたとしても)youがXMLHttpRequest
name__を書いたことを意味するのではありません。私はあなたがXMLHttpRequest
name__を使うコードを書いたことを意味しました。ブラウザはXMLHttpRequest
name__をネイティブにサポートしていません。 XMLHttpRequest
name__はJavaScriptランタイムに由来し、ブラウザによってホストされることがありますが、必須ではありません( Rhino を参照)。ブラウザがPUT
name__とDELETE
name__をサポートしていないと人々が言うのはそのためです。実際にJavaScriptがそれらをサポートしているからです。
YES、PUT、DELETE、HEADなどHTTPメソッドはすべての最近のブラウザで利用できます。
XMLHttpRequest Level 2 ブラウザに準拠するには、これらのメソッドをサポートしている必要があります。どのブラウザがXMLHttpRequest Level 2をサポートしているかを確認するには、CanIUseをお勧めします。
Opera Miniだけがatm(juli '15)をサポートしていませんが、Opera Miniはすべてをサポートしていません。 :)
ちなみに、Safari 2以前はPUTとDELETEをサポートしていませんでした。私は3の印象を受けますが、もうテストするためにそれを持っていません。 Safari 4は間違いなくPUTとDELETEをサポートしています。