626

How to debug RESTful servicesのようなここでいくつかの質問を見てきました。

残念ながら、その同じブラウザーでは、HTTP PUT、DELETE、およびある程度の HTTP POST をテストすることはできません。

また、ブラウザーは GET と POST のみをサポートしていると聞いたことがあります。次のような他のソースからです。

ただし、Firefox でのいくつかの簡単なテストでは、送信PUTDELETE要求が期待どおりに機能することがXMLHttpRequest示されています。正常に完了し、要求は正しい方法でサーバー ログに表示されます。ブラウザ間の互換性や明らかでない制限など、私が見逃している側面はありますか?

4

7 に答える 7

472

いいえ。HTML5仕様には次のように記載されています。

methodおよびformmethodcontent属性は、次のキーワードと状態を持つ列挙属性です。

キーワードgetは、状態GETにマッピングされ、HTTPGETメソッドを示します。GETメソッドは、データを要求および取得するだけで、他の効果はありません。

キーワードpost、状態POSTにマッピング、HTTPPOSTメソッドを示します。POSTメソッドは、サーバーが送信されたフォームのデータを受け入れて処理することを要求します。これにより、アイテムがデータベースに追加されたり、新しいWebページリソースが作成されたり、既存のページが更新されたり、上記のすべての結果が発生したりする可能性があります。 。

キーワードdialogは、状態ダイアログにマッピングされ、フォームの送信は、フォームが存在する場合はそれ自体を検出するダイアログボックスを閉じることを目的としており、それ以外の場合は送信しないことを示します。

これらの属性のデフォルトの無効な値はGET状態です

つまり、HTMLフォームは、HTTPリクエストメソッドとしてGETPOSTのみをサポートします。この回避策は、サーバーによって読み取られ、それに応じて要求がディスパッチされる非表示のフォームフィールドを使用して、POSTを介して他のメソッドをトンネリングすることです。

ただし、GETPOSTPUT、およびDELETE 、すべての主要なWebブラウザー(IE、Firefox、Safari、Chrome、Opera)でのXMLHttpRequest(つまり、AJAX呼び出し)の実装によってサポートされています。

于 2008-10-03T12:02:06.047 に答える
85

HTML フォームはGET と POST をサポートします。(HTML5 では、ある時点で PUT/DELETE が追加されましたが、それらは削除されました。)

XMLHttpRequestは CHICKEN を含むすべてのメソッドをサポートしますが、一部のメソッド名は大文字と小文字を区別せずに照合され (メソッドは HTTP では大文字と小文字が区別されます)、一部のメソッド名はセキュリティ上の理由からまったくサポートされていません (例: CONNECT)。

Fetch APIは、セキュリティ上の理由から禁止されている CONNECT、TRACE、および TRACK を除くすべてのメソッドもサポートしています。

ブラウザーは XMLHttpRequest で指定されたルールに徐々に収束していますが、他のコメントが指摘したように、まだいくつかの違いがあります。

于 2008-10-05T13:40:40.760 に答える
44

XMLHttpRequestJavaScriptオブジェクトモデルの標準オブジェクトです。

Wikipediaによると、XMLHttpRequest最初はInternet Explorer 5にActiveXオブジェクトとして登場しましたが、その後標準になり、1.0、Apple Safari 1.2、Opera 7.60-p1、およびIE7.0以降MozillaファミリのJavaScriptで使用できるようになりました。 。

オブジェクトのopen()メソッドは、HTTPメソッドを引数として取ります-そして、RFC 2616で指定されているように、、、、およびを含むGET、任意の有効なHTTPメソッド(リンクの項目番号5を参照)を取るように指定されます。POSTHEADPUTDELETE

補足として、IE 7–8は次のHTTPメソッドのみを許可します: "GET"、 "POST"、 "HEAD"、 "PUT"、 "DELETE"、 "MOVE"、 "PROPFIND"、 "PROPPATCH"、 "MKCOL" 、「COPY」、「LOCK」、「UNLOCK」、および「OPTIONS」

于 2008-10-03T09:59:29.517 に答える
17

これらのコメントは、特にブラウザに言及していると思います。つまり、リンクをクリックしてフォームを送信するのではなく、XMLHttpRequestです。は、ブラウザをランタイムとして使用するJavaScriptでXMLHttpRequest作成したカスタムクライアントです

更新:明確にするために、私はあなたが書いたという意味ではありませんでした(私は書いたのですXMLHttpRequestが) ; つまり、を使用するコードを記述したということですXMLHttpRequest。ブラウザはネイティブでをサポートしていませんXMLHttpRequestXMLHttpRequest必須ではありませんが、ブラウザによってホストされる可能性のあるJavaScriptランタイムから取得されます(Rhinoを参照)。そのため、ブラウザはサポートしていないと言われています。実際にブラウザをサポートPUTDELETEているのはJavaScriptだからです。

于 2008-10-03T09:49:34.153 に答える
8

追加するだけです-Safari 2以前は、PUTとDELETEを完全にサポートしていませんでした。私は 3 の印象を受けましたが、もうテストする必要はありません。Safari 4 は間違いなく PUT と DELETE をサポートしています。

于 2009-07-31T14:39:13.547 に答える