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.単一のリクエストで3つのファイルをアップロードしています。これらの3つのファイルは3つのエンティティです。それぞれに独自のContent-Type
があり、どの種類のファイルであるかを示します。
ケース2. Webページを表示しています。ブラウザは、バックグラウンドでエンティティとしてhtmlファイルをダウンロードしました。ページは継続的に更新される可能性があるため、後でまったく異なるエンティティを取得できます。
ケース3. 304 Not Modified
があります。譲渡されたエンティティはありません。
Wordでは、エンティティはhttpメッセージ内のオプションのペイロード(要求または応答のいずれか)であるため、エンティティとメッセージ間の "part-whole"関係です。
Transfer-Encoding
のようなMessage
に適用されるヘッダーフィールドは、仲介者間でメッセージを転送する方法を説明するため、要求/応答チェーン(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
上の図は、ユーザーエージェントとOriginサーバーの間の3つの仲介者(A、B、およびC)を示しています。チェーン全体を移動する要求または応答メッセージは、4つの個別の接続を通過します。
要求メッセージと応答メッセージの両方に一般的に適用できるヘッダーフィールドがいくつかありますが、転送されるエンティティには適用されません。これらのヘッダーフィールドは、送信されるメッセージにのみ適用されます。
メッセージの安全で適切な転送を保証するために、Transfer-Encodingを使用して、アプリケーションによって適用される転送コーディングを示す必要があります。 Transfer-Encodingはエンティティではなくメッセージのプロパティであるため、要求/応答チェーンに沿ったアプリケーションによって追加または削除される場合があります。
message-body = Transfer-Encoding( Content-Encoding(entity-body) )
ここで、Transfer-Encoding
はメッセージの転送方法を意味する「チャンク」であり、Content-Encoding
はエンティティの圧縮方法を表す「gzip」です。
表す抽象化要求または応答ペイロードです。 JavaDoc は、その目的とさまざまなエンティティタイプについて明確です。
HTTPは、ネットワークを介してリモートマシンから情報にアクセスするときに観察されるプロトコルです。通常、ネットワークはインターネットであり、リモートマシンはサーバーです。
人Aから人Bに情報を求めるとき、彼にメッセージを伝えます。 (要求)。ユーザーBが返信します(応答)。要求と応答はHTTPメッセージタイプです。
個人Aは、情報を要求する代わりに、個人Bに何かをするように依頼できます。たとえば、個人Aが個人Bにファイルを安全な場所に保存してほしいとします。そのため、ユーザーAはそのファイル(HTTPエンティティ)をユーザーBに渡し、何かを行うように依頼します(HTTPメッセージ)。この場合、Personは「Entity」を渡します。 HTTPエンティティのコンテキストでは、メッセージに添付されたペイロードです。
類推が助けてくれることを願っています。
@ hawkeye-parkerのコメントで述べたように、Entityは廃止されたようです。 この2014 rfcで検索 を作成すると、XMLエンティティとメッセージ本文について表示されますが、Httpエンティティについては表示されません。
それにもかかわらず、HttpClientだけでなくJaxRSクライアントにも、setEntity()
およびgetEntity()
メソッドがあります。
受け入れられた答えを考えると、両方のライブラリが間違っています! HttpClient.setEntity()
は、以前に設定されたヘッダーを削除しません。
ここにある良い答えの中で、 RFC 2616(ハイパーテキスト転送プロトコル-HTTP/1.1) から直接来るものに言及する価値があると思います。
エンティティ
要求および応答メッセージは、要求メソッドまたは応答ステータスコードによって制限されていない場合、エンティティを転送できます。 エンティティは、エンティティヘッダーフィールドとエンティティボディで構成されますが、一部の応答にはエンティティヘッダーのみが含まれます。
一言で言えば:エンティティを転送でき、header+body、またはheaderのみ。
上記のリンクがあるため、追加のコメントを作成することに専念しています。
エンティティはメッセージのようなもので、ヘッダーで構成されています。ヘッダーには、location、lang、encodingなどのメタデータがあります。
また、オプションでボディ-コンテンツはヘッダーで指定されたようにフォーマットされます