web-dev-qa-db-ja.com

HTTPリクエストメソッドのペイロード

HTTPのウィキペディアエントリ は、次のHTTPリクエストメソッドをリストします。

  • HEAD:GET要求に対応する応答と同一の応答を要求しますが、応答本体はありません。
  • GET:指定されたリソースの表現を要求します。
  • POST:処理するデータを(たとえば、HTMLフォームから)特定したリソースに送信します。データはリクエストの本文に含まれています。
  • PUT:指定されたリソースの表現をアップロードします。
  • DELETE:指定されたリソースを削除します。
  • TRACE:受信したリクエストをエコーバックし、クライアントが中間サーバーによって行われた変更(追加がある場合)を確認できるようにします。
  • OPTIONS:サーバーが指定されたURLに対してサポートするHTTPメソッドを返します。これは、特定のリソースの代わりに「*」を要求することにより、Webサーバーの機能を確認するために使用できます。
  • CONNECT:通常、暗号化されていないHTTPプロキシを介したSSL暗号化通信(HTTPS)を促進するために、要求接続を透過的なTCP/IPトンネルに変換します。
  • PATCH:リソースに部分的な変更を適用するために使用されます。

私は知ることに興味があります(特に最初の5つの方法に関して):

  • これらのメソッドのどれがペイロードを受信できるか(想定)?
    • ペイロードを受信できるメソッドのうち、どのように受信するのですか?
      • uRLのクエリ文字列経由?
      • uRLエンコードされた本文経由?
      • 生/チャンクボディ経由?
      • 上記の([すべて/一部])の組み合わせを介して?

あなたがいくつかの(できれば軽い)読み物を共有できるなら、すべての入力に感謝します!

66
Alix Axel

RFC 7231 、HTTP 1.1セマンティクスおよびコンテンツは、HTTPメソッドのセマンティクスに関する最新かつ信頼できるソースです。この仕様は、GET、HEAD、OPTIONS、またはCONNECTメッセージに含まれる可能性のあるペイロードには定義された意味がないことを示しています。セクション4.3.8では、クライアントはTRACEリクエストのボディを送信してはならないと述べています。そのため、TRACEのみがペイロードを持つことはできませんが、GET、HEAD、OPTIONS、およびCONNECTはおそらくそうではなく、クライアントが送信する場合、サーバーはそれを処理する方法を予期していません(無視できることを意味します)。

曖昧なものがあると思われる場合は、 メーリングリスト があり、懸念を表明できます。

28
Darrel Miller

RFC 7231 、リンクの更新バージョン @ Darrel の要約を以下に示します。

  • [〜#〜] head [〜#〜]-定義されたボディセマンティクスはありません。
  • [〜#〜] get [〜#〜]-定義されたボディセマンティクスはありません。
  • [〜#〜] put [〜#〜]-ボディがサポートされています。
  • [〜#〜] post [〜#〜]-ボディがサポートされています。
  • [〜#〜] delete [〜#〜]-定義されたボディセマンティクスはありません。
  • [〜#〜] trace [〜#〜]-Bodynotサポートされています。
  • [〜#〜] options [〜#〜]-ボディはサポートされていますが、使用に関するセマンティクスはありません(将来的には)。
  • [〜#〜] connect [〜#〜]-定義されたボディセマンティクスなし

@ John も言及されているように、すべてのリクエストメソッドはURLでクエリ文字列をサポートしています(1つの注目すべき例外は[〜#〜] options [〜#〜]URLがHost/*)。

[〜#〜] connect [〜#〜]および[〜#〜]はテストしていませんpatch [〜#〜]メソッド。ATMには興味がないので。

83
Alix Axel

GETリクエストにペイロードを含めることができるかどうかは明確ではないと確信しています。 GETリクエストは通常​​、クエリ文字列を介してフォームデータを送信します。HEADリクエストと同じです。HEADは本質的にはGETです-応答本文が必要ないことを除きます。

(サイドノート:GETリクエストが別のプロトコルに技術的にアップグレードできるため、明確ではないと言います;実際、websocketsのバージョンはこれを行いましたが、一部のプロキシソフトウェアはそれでうまく動作しましたが、他のものはハンドシェイクで停止しました。)

通常、POSTには本体があります。クエリ文字列の使用を妨げるものは何もありませんが、POST本文には通常、POSTのフォームデータが含まれます。

詳細(および詳細)情報については、実際の HTTP/1.1仕様 を参照してください。

3
John Chadwick