Würde mir bitte jemand beschreiben, was genau eine HTTP-Entität ist ist?
Ich lese die HTTPClient-Dokumentation, verstehe aber nicht wirklich, was das bedeutet.
Würde mir bitte jemand beschreiben, was genau eine HTTP-Entität ist ist?
Ich lese die HTTPClient-Dokumentation, verstehe aber nicht wirklich, was das bedeutet.
Antworten:
Eine HTTP-Entität ist der Großteil einer HTTP-Anforderung oder -Antwort, die aus einigen der Header und dem Body besteht, falls vorhanden. Es scheint sich um die gesamte Anfrage oder Antwort ohne die Anfrage- oder Statuszeile zu handeln (obwohl nur bestimmte Headerfelder als Teil der Entität betrachtet 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 ... # ┘
&
stattdessen verwenden &
. Ist das nicht auch eine Einheit? Was ist der Unterschied?
&
ist eine HTML- Zeichenentitätsreferenz , nicht dasselbe wie eine HTTP-Entität .
Hier sind 3 einfache Fälle:
Fall 1. Sie laden 3 Dateien in einer einzigen Anfrage hoch. Diese 3 Dateien sind 3 Entitäten. Jeder von ihnen hat seine eigenenContent-Type
um anzugeben, 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 eine 304 Not Modified
. Es wurde keine Entität übertragen.
Mit einem Wort, Entität ist eine optionale Nutzlast innerhalb einer http-Nachricht (entweder Anforderung oder Antwort), also eine " Teil-Ganz " -Beziehung zwischen Entität und Nachricht.
Einige Header - Felder gelten Message
wie Transfer-Encoding
beschreiben , wie Nachricht zwischen Vermittlern übertragen, und kann somit von jeder Anwendung auf dem Request / Response - Kette (hinzugefügt oder entfernt werden hop-by-hop headers
). Im Vergleich dazu gelten diese Headerfelder fürEntity
einige Eigenschaften, die die Größe, den Typ, den Komprimierungsalgorithmus usw. der Entität beschreiben.
Weiterführende Literatur, zitiert aus RFC 2616, Abschnitt 1.4, 4.5 und 4.3:
request chain --------------------------------------> UA -----v----- A -----v----- B -----v----- C -----v----- O <------------------------------------- response chain
Die obige Abbildung zeigt drei Vermittler (A, B und C) zwischen dem Benutzeragenten und dem Ursprungsserver. Eine Anforderungs- oder Antwortnachricht, die die gesamte Kette durchläuft, wird über vier separate Verbindungen geleitet.
Es gibt einige Headerfelder, die sowohl für Anforderungs- als auch für Antwortnachrichten allgemein anwendbar sind, jedoch nicht für die übertragene Entität gelten . Diese Headerfelder gelten nur für die übertragene Nachricht .
Die Übertragungscodierung MUSS verwendet werden, um alle von einer Anwendung angewendeten Übertragungscodierungen anzugeben, um eine sichere und ordnungsgemäße Übertragung der Nachricht zu gewährleisten. Die Übertragungscodierung ist eine Eigenschaft der Nachricht, nicht der Entität, und kann daher von jeder Anwendung entlang der Anforderungs- / Antwortkette hinzugefügt oder entfernt werden.
message-body = Transfer-Encoding( Content-Encoding(entity-body) )
wo Transfer-Encoding
kann "chunked" sein, was bedeutet, wie die Nachricht übertragen wird, und Content-Encoding
kann "gzip" sein, was für das Komprimieren der Entität steht.
Ich denke, der HTTPClient Entity
ist nach HTTP- Entität benannt .
HTTP ist ein Protokoll, das beim Zugriff auf Informationen von einem Remotecomputer über ein Netzwerk eingehalten wird. Normalerweise ist das Netzwerk Internet und der Remote-Computer ist ein Server.
Wenn Sie von Person A nach Person B um Informationen bitten, geben Sie ihm eine Nachricht. (Anfrage). Person B antwortet Ihnen (Antwort). Anforderung und Antwort sind HTTP-Nachrichtentypen.
Person A kann Person B bitten, etwas zu tun, anstatt nach Informationen zu fragen. Angenommen, Person A möchte, dass Person B eine Datei an einem sicheren Ort speichert. Person A übergibt diese Datei (HTTP-Entität) an Person B und fordert sie auf, etwas zu tun (HTTP-Nachricht). In diesem Fall übergibt die Person eine "Entität". Im Kontext der HTTP-Entität handelt es sich um eine mit der Nachricht verknüpfte Nutzlast.
Hoffe die Analogie hat geholfen.
Wie in einem Kommentar von @ hawkeye-parker erwähnt, scheint Entity veraltet zu sein. Wenn Sie in diesem RFC 2014 eine Suche durchführen , werden Sie Informationen zu XML-Entitäten und zum Nachrichtentext erhalten, jedoch nichts zu HTTP-Entitäten.
Trotzdem haben HttpClient, aber auch der JaxRS-Client eine setEntity()
und getEntity()
-Methode.
In Anbetracht der akzeptierten Antwort sind beide Bibliotheken falsch! HttpClient.setEntity()
zuvor gesetzte Header werden nicht entfernt.
HttpEntity
ist das, was Sie in Request (mit Header) übergeben und was Sie in Response erhalten. Für Get Request übergeben wir einen einfachen String
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(headers);
Für die Post werden wir die komplette Entitätsklasse bestehen
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();
}
Entität ist so etwas wie eine Nachricht, sie besteht aus einem Header, in dem Metadaten wie Ort, Sprache, Codierung ...
Und optional eines Körpers - der Inhalt wird wie in der Kopfzeile angegeben usw. formatiert
Unter den guten Antworten, die wir hier haben, sollte meines Erachtens etwas erwähnt werden, das direkt aus dem RFC 2616 (Hypertext Transfer Protocol - HTTP / 1.1) stammt :
Entität
Anforderungs- und Antwortnachrichten KÖNNEN eine Entität übertragen, wenn dies nicht durch die Anforderungsmethode oder den Antwortstatuscode anderweitig eingeschränkt ist. Eine Entität besteht aus Entity-Header-Feldern und einem Entity-Body, obwohl einige Antworten nur die Entity-Header enthalten.
Kurz gesagt: Eine Entität kann übertragen werden, und es kann sich um den Header + Body oder nur um den Header handeln .
Da es den obigen Link gibt, halte ich mich zurück, um zusätzliche Kommentare abzugeben.