web-dev-qa-db-de.com

Was genau ist ein HTTP-Objekt?

Kann mir bitte jemand beschreiben, was genau eine HTTP-Entität ist?

Ich lese die HTTPClient-Dokumentation, verstehe aber nicht, was das bedeutet?

105
helloThere

Eine HTTP-Entität ist die Mehrheit einer HTTP-Anforderung oder -Antwort, bestehend aus einigen Kopfzeilen und dem Hauptteil, falls vorhanden. Es scheint die gesamte Anfrage oder Antwort ohne die Anfrage- oder Statuszeile zu sein (obwohl nur bestimmte Header-Felder als Teil der Entität angesehen werden ).

Um zu zeigen; hier ist eine anfrage:

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! ...           # ┘

Und eine Antwort:

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 ...           # ┘
122
maerics

Hier sind 3 einfache Fälle:

Fall 1. Sie laden 3 Dateien in einer einzigen Anfrage hoch. Diese 3 Dateien sind 3 Einheiten. Jeder von ihnen hat einen eigenen Content-Type, der angibt, um welche Art von Datei es sich handelt.

Fall 2. Sie sehen eine Webseite. Der Browser hat eine HTML-Datei als Entität im Hintergrund heruntergeladen. Da die Seite kontinuierlich aktualisiert werden kann, erhalten Sie möglicherweise später eine völlig andere Entität.

Fall 3. Sie haben einen 304 Not Modified. Es wurde keine Entität übertragen.

In einem Wort ist Entität ist eine optionale Nutzlast in einer http-Nachricht (entweder Anforderung oder Antwort), also eine "Teil-Ganzheit" - Beziehung zwischen Entität und Nachricht.

Einige Header-Felder gelten für Message wie Transfer-Encoding, um zu beschreiben, wie Nachrichten zwischen Vermittlern übertragen werden, und können daher von jeder Anwendung entlang der Anforderungs-/Antwortkette (hop-by-hop headers) hinzugefügt oder entfernt werden. Im Vergleich dazu gelten diese Header-Felder für Entity. Hierbei handelt es sich um einige Eigenschaften, die die Größe, den Typ, den Komprimierungsalgorithmus usw. der Entität beschreiben.

Weitere Lektüre unter Bezugnahme auf RFC 2616, Abschnitt 1.4, 4.5 und 4.3:

  • Eine Anforderungs-/Antwortkette
     request chain -------------------------------------->
   UA -----v----- A -----v----- B -----v----- C -----v----- O
      <------------------------------------- response chain

Die obige Abbildung zeigt drei Intermediäre (A, B und C) zwischen dem Benutzeragenten und dem Origin-Server. Eine Anforderungs- oder Antwortnachricht, die die gesamte Kette durchläuft, durchläuft vier separate Verbindungen.

  • Header-Felder für Nachricht oder Entität

Es gibt einige Header-Felder, die sowohl für Anforderungs- als auch für Antwortnachrichten allgemein anwendbar sind, jedoch nicht für die zu übertragende Entität gelten. Diese Header-Felder gelten nur für die übertragene Nachricht.

  • Header-Felder für die Nachricht können entlang der Kette geändert werden

Übertragungscodierung MUSS verwendet werden, um alle von einer Anwendung angewendeten Übertragungscodierungen anzugeben, um eine sichere und ordnungsgemäße Übertragung der Nachricht zu gewährleisten. Transfer-Encoding ist eine Eigenschaft der Nachricht, nicht der Entität, und kann daher von jeder Anwendung entlang der Anforderungs-/Antwortkette hinzugefügt oder entfernt werden.

  • Beziehung zwischen Nachrichtentext und Entitätentext

message-body = Transfer-Encoding( Content-Encoding(entity-body) )

dabei kann Transfer-Encoding "chunked" sein, was bedeutet, wie die Nachricht übertragen wird, und Content-Encoding kann "gzip" sein, was bedeutet, wie die Entität komprimiert werden soll.

14
Anderson

Es ist eine Abstraktion, die eine Anfrage oder Antwort payload darstellt. Das JavaDoc ist über seinen Zweck und verschiedene Entitätstypen klar.

11

Ich denke, der HTTPClient Entity wird nach HTTP Entity benannt.

6
Riduidel

HTTP ist ein Protokoll, das beim Zugriff auf Informationen von einem Remote-Computer über ein Netzwerk eingehalten wird. Normalerweise handelt es sich bei dem Netzwerk um Internet und der entfernte Rechner ist ein Server. 

Wenn Sie nach Informationen von Person A zu Person B fragen, geben Sie ihm eine Nachricht. (Anfordern). Person B antwortet Ihnen (Antwort). Anfrage und Antwort sind HTTP-Nachrichtentypen.

Person A kann Person B auffordern, etwas zu tun, anstatt nach Informationen zu fragen. Angenommen, Person A möchte, dass Person B eine Datei an einem sicheren Ort speichert. So übergibt Person A diese Datei (HTTP-Entität) an Person B und fordert sie auf, etwas zu tun (HTTP-Nachricht). In diesem Fall übergibt Person eine "Entität". Im Zusammenhang mit HTTP Entity ist dies eine mit der Nachricht verknüpfte Nutzlast. 

Hoffe, die Analogie hat geholfen.

2
Akshayraj Kore

Wie in einem Kommentar von @ hawkeye-parker gesagt, scheint es, als sei Entity veraltet. Machen Sie eine Suche in diesem 2014 rfc und Sie werden XML-Entitäten und Nachrichtentext sehen, aber nichts über Http-Entität.

Trotzdem haben HttpClient, aber auch JaxRS-Client eine setEntity()- und getEntity()-Methode.

In Anbetracht der akzeptierten Antwort sind beide Bibliotheken falsch! HttpClient.setEntity() entfernt zuvor gesetzte Header nicht. 

2
Nicolas Zozol

Ich glaube, unter den guten Antworten, die wir hier haben, ist es erwähnenswert, etwas zu erwähnen, das direkt vom RFC 2616 (Hypertext Transfer Protocol - HTTP/1.1) kommt

Entität

Anforderungs- und Antwortnachrichten KÖNNEN eine Entität übertragen, wenn nicht anders eingeschränkt durch die Anforderungsmethode oder den Antwortstatuscode. Eine Entität besteht aus Entity-Header-Feldern und einem Entity-Body, obwohl einige Antworten enthalten nur die Entitätskopfzeilen.

Kurz gesagt: Eine Entität kann übertragen werden, und es kann der Header + Body oder nur der Header sein. 

Da es den Link oben gibt, halte ich mich für weitere Kommentare fest.

0
ivanleoncz

Entity ist so etwas wie eine Nachricht, sie besteht aus Header, wo Metadaten wie location, lang, encoding usw. stehen.

Und optional von einem Body - es wird Inhalt formatiert usw., wie im Header angegeben

0
user1190541