誰かが正確にHTTPエンティティとは何かを私に説明してくれませんか?
HTTPClientのドキュメントを読んでいますが、その意味がよくわかりません。
誰かが正確にHTTPエンティティとは何かを私に説明してくれませんか?
HTTPClientのドキュメントを読んでいますが、その意味がよくわかりません。
回答:
HTTPエンティティはからなる、HTTP要求または応答の大部分であるヘッダのいくつか存在する場合、及び身体。リクエストまたはステータス行がないリクエストまたはレスポンス全体のようです(ただし、特定のヘッダーフィールドのみがエンティティの一部と見なされます)。
説明する; ここにリクエストがあります:
POST /foo HTTP/1.1 # Not part of the entity.
Content-Type: text/plain # ┬ The entity is from this line down...
Content-Length: 1234 # │
# │
Hello, World! ... # ┘
そして応答:
HTTP/1.1 200 OK # Not part of the entity.
Content-Length: 438 # ┬ The entity is from this line down...
Content-Type: text/plain # │
# │
Response body ... # ┘
&
代わりに使用していると思いました&
。それも実体ではありませんか?違いは何ですか?
簡単な3つのケースを次に示します。
ケース1. 1つのリクエストで3つのファイルをアップロードしています。これらの3つのファイルは3つのエンティティです。それぞれにContent-Type
、ファイルの種類を示す独自のファイルがあります。
ケース2. Webページを表示しています。ブラウザがバックグラウンドでエンティティとしてhtmlファイルをダウンロードしました。ページは継続的に更新される可能性があるため、後で完全に異なるエンティティを取得する可能性があります。
ケース3。 304 Not Modified
ます。エンティティは転送されていません。
つまり、Entityはhttpメッセージ(要求または応答のいずれか)内のオプションのペイロードであるため、EntityとMessageの間の「部分全体」の関係です。
いくつかのヘッダーフィールドは、に適用Message
たいTransfer-Encoding
(媒体間のメッセージを転送する方法を説明し、したがって要求/応答チェーンに沿った任意のアプリケーションによって追加又は除去することができますhop-by-hop headers
)。比較すると、これらのヘッダーフィールドが適用されるのEntity
は、エンティティのサイズ、タイプ、圧縮アルゴリズムなどを説明するいくつかのプロパティです...
さらに読むと、RFC 2616セクション1.4、4.5、および4.3から引用します。
request chain --------------------------------------> UA -----v----- A -----v----- B -----v----- C -----v----- O <------------------------------------- response chain
上の図は、ユーザーエージェントと配信元サーバーの間の3つの仲介者(A、B、C)を示しています。チェーン全体を移動する要求または応答メッセージは、4つの個別の接続を通過します。
要求メッセージと応答メッセージの両方に一般的に適用できるヘッダーフィールドがいくつかありますが、転送されるエンティティには適用されません。これらのヘッダーフィールドは、送信されるメッセージにのみ適用されます。
Transfer-Encodingは、メッセージの安全で適切な転送を保証するためにアプリケーションによって適用される転送コーディングを示すために使用する必要があります。Transfer-Encodingは、エンティティではなくメッセージのプロパティであるため、要求/応答チェーンに沿ってアプリケーションによって追加または削除される場合があります。
message-body = Transfer-Encoding( Content-Encoding(entity-body) )
ここで、Transfer-Encoding
「チャンク」はメッセージの転送方法を意味し、Content-Encoding
「gzip」はエンティティの圧縮方法を表します。
HTTPは、ネットワーク経由でリモートマシンから情報にアクセスするときに観察されるプロトコルです。通常、ネットワークはインターネットで、リモートマシンはサーバーです。
AからBに情報を要求するとき、彼にメッセージを与えます。(リクエスト)。人Bがあなたに返信します(応答)。要求と応答はHTTPメッセージタイプです。
人物Aは、情報を要求する代わりに、人物Bに何かを依頼することができます。たとえば、人物Aが人物Bに安全な場所にファイルを保存することを望んでいるとします。したがって、人物Aはそのファイル(HTTPエンティティ)を人物Bに渡し、何か(HTTPメッセージ)を実行するように依頼します。この場合、Personは「エンティティ」を渡します。HTTPエンティティのコンテキストでは、メッセージに添付されたペイロードです。
アナロジーが役に立てば幸い。
@ hawkeye-parkerのコメントで述べたように、エンティティは廃止されたようです。作成し、この2014 RFCで検索して、あなたは、HTTPエンティティに関するXMLエンティティとメッセージ本文、何もについて表示されます。
それでも、HttpClientだけでなくJaxRSクライアントにもsetEntity()
and getEntity()
メソッドがあります。
受け入れられた答えを考えると、両方のライブラリが間違っています!HttpClient.setEntity()
以前に設定されたヘッダーは削除されません。
HttpEntity
Request(ヘッダー付き)で渡すものとResponseで受け取るものです。Getリクエストでは、単純な文字列を渡します
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(headers);
ポストの場合は、完全なエンティティークラスを渡します
public String createProducts(@RequestBody Product product) {
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<Product> entity = new HttpEntity<Product>(product,headers);
return restTemplate.exchange(
"http://localhost:8080/products", HttpMethod.POST, entity, String.class
).getBody();
}
エンティティはメッセージのようなもので、ヘッダーで構成され、場所、言語、エンコーディングなどのメタデータは...
必要に応じて本文-ヘッダーで指定されているようにコンテンツの形式など
ここにある良い答えの中で、RFC 2616(Hypertext Transfer Protocol-HTTP / 1.1)から直接来るものについて言及する価値があると思います:
エンティティ
リクエストおよびレスポンスメッセージは、リクエストメソッドまたはレスポンスステータスコードによって制限されていない限り、エンティティを転送する場合があります。エンティティはエンティティヘッダーフィールドとエンティティボディで構成されますが、一部の応答にはエンティティヘッダーのみが含まれます。
一言で言えば、エンティティは転送される可能性があり、それはheader + body、または単なるheaderです。
上記のリンクがあるので、私は追加のコメントをすることを控えています。