受け入れられた答えは非常に実用的です。必ずご覧ください。ただし、ここで詳しく説明する基本的な違いが 2 つあります。
1 - HTTP リクエストが作成されたときにそれぞれが配置される場所を理解する
URL は HTTP メッセージとは異なります。HTTP メッセージは、RequestまたはResponseのいずれかになります。この回答では、リクエストに焦点を当てます。
HTTP リクエストは、主に url、http メソッド、http ヘッダーで構成されます (他にもチャンクがありますが、最も重要なものについて言及しているだけです)。
Request = Request-Line ; Section 5.1
*(( general-header ; Section 4.5
| request-header ; Section 5.3
| entity-header ) CRLF) ; Section 7.1
CRLF
[ message-body ] ; Section 4.3
リクエスト行は次のとおりです。
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
CLRF
新しい行のようなものです。
詳細については、こちらとこちらをご覧ください。うまくいくまで、リンク間を行ったり来たりする必要があるかもしれません。本当に深く掘り下げたい場合は、このRFCを参照してください。
したがって、基本的にリクエストは次のようなものです。
POST /cgi-bin/process.cgi?tag=networking&order=newest HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Content-Type: text/xml; charset=utf-8
Content-Length: 60
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
first=Zara&last=Ali
クエリ パラメータはURL 内にあります。HTTP ヘッダーは URL の一部ではありません。それらは HTTP メッセージの一部です。上記の例では、クエリ パラメータはtag=networking&order=newest
で、ヘッダーは次のとおりです。
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Content-Type: text/xml; charset=utf-8
Content-Length: 60
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
したがって、ネットワーク リクエストを行うときは、http プロトコルを使用してフォーマットされた文字列を作成しています。その文字列はTCP接続を介して送信されます
2 - どちらも物事を伝えるために使用できますが、一方が他方よりも好まれる理由と場所を理解する
チャットでのロブとの議論から:
基準は、それがリクエストまたはクライアントに関する情報である場合、ヘッダーが適切であるということです。
ただし、それがリクエスト自体の内容である場合 (たとえば、サーバーからリクエストしているもの、返されるアイテムを特定する詳細、Web サーバーに保存される詳細など)、それはパラメーターです。
パラメータ
製品の画像をリクエストしているとしましょう。製品 ID は 1 つのパラメーターである場合があります。画像サイズ (サムネイルとフルサイズ) は、別のパラメーターである可能性があります。製品 ID と要求された画像サイズは、要求のコンテンツの一部として提供される「一部の詳細」(またはパラメーター) の例です。
ヘッダー
しかし、リクエストのようなものは JSON であるか、リクエストのコンテンツx-www-form-urlencoded
ではなく、リクエストに関するメタデータです(特に、Web サービスがリクエストの本文を解析する方法を知る必要があるため)。というわけでヘッダーです。
多くの場合、アプリがさまざまなリクエストを行う場合、そのヘッダーには多くの共通点があります。ただし、パラメータはコンテンツ ベースであるため、より多様化する必要があります。