Was genau ist eine HTTP-Entität?

114

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.

Hallo
quelle
2
Ich bin von diesem Artikel über HTTP hierher gekommen: HTTP: Das Protokoll, das jeder Webentwickler kennen muss, wenn hier jemand nach Informationen zu diesem Thema sucht.
Mason240
2
Beachten Sie, dass der Begriff "HTTP-Entität" in den neuesten HTTP 1.1-Spezifikationen nicht mehr vorkommt . Sieht aus wie es veraltet ist. Jetzt können wir nur noch "Header-Felder" und "Nachrichtentext" verwenden.
Hawkeye Parker

Antworten:

139

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 ...           # ┘
Maerics
quelle
3
Host ist kein Entity-Header-Feld.
Gumbo
Ich dachte, eine Entität würde &stattdessen verwenden &. Ist das nicht auch eine Einheit? Was ist der Unterschied?
CodyBugstein
1
@Imray: &ist eine HTML- Zeichenentitätsreferenz , nicht dasselbe wie eine HTTP-Entität .
Maerics
2
@ lmray: Sie sind ganz andere Einheiten. ;) (Bei einem geht es darum , Zeichenfolgen in einem HTML-Text zu codieren , bei dem anderen geht es darum , Informationen zu strukturieren , wenn ein Browser und ein Server über das HTTP-Protokoll miteinander kommunizieren . Außerdem ist einer verwirrender als der andere. Oder umgekehrt. - o)
Gr.
6
Beachten Sie, dass der Begriff "HTTP-Entität" in den neuesten HTTP 1.1-Spezifikationen nicht mehr vorkommt . Sieht aus wie es veraltet ist. Jetzt können wir einfach bei "Header-Feldern" und "Nachrichtentext" bleiben.
Hawkeye Parker
15

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 Messagewie Transfer-Encodingbeschreiben , 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:

  • Eine Anforderungs- / Antwortkette
     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.

  • Kopfzeilenfelder entweder für Nachricht oder Entität

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 .

  • Kopfzeilenfelder für Nachricht können entlang der Kette geändert werden

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.

  • Beziehung zwischen Nachrichtentext und Entitätstext

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

wo Transfer-Encodingkann "chunked" sein, was bedeutet, wie die Nachricht übertragen wird, und Content-Encodingkann "gzip" sein, was für das Komprimieren der Entität steht.

Anderson
quelle
Wow, danke, dass du die "Teil-Ganz" -Beziehung zwischen Entität und Nachricht geklärt hast! Der Rest trägt irgendwie zur Verwirrung bei, ist aber insgesamt immer noch eine Gegenstimme wert. Prost!
Gr.
12

Es ist eine Abstraktion repräsentiert eine Anforderung oder Antwort Nutzlast . Das JavaDoc ist klar über seinen Zweck und verschiedene Entitätstypen.

Aravind Yarram
quelle
3
+1 für die Bezeichnung "Nutzlast", die diesem nichtigen Begriff ("Entität") schließlich eine Bedeutung hinzufügt.
Gr.
2

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.

ARCHE
quelle
2

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.

Nicolas Zozol
quelle
Ich fand die Unterscheidung zwischen "Entity" (und verwandten "Entity-Headern") und "Message" sehr nützlich. Dies wird schnell deutlich, wenn Sie eine Netzwerkbibliothek entwerfen und eine Analyse einer HTTP-Nachricht und ihrer verschiedenen Inkarnationen durchführen, z. B. einer mehrteiligen Nachricht. Leider führen die neuen RFCs diese unterschiedlichen "Klassen" zu einer zusammen, und wir müssen unsere eigene Terminologie einführen oder bei "Entität" bleiben.
CouchDeveloper
1

HttpEntityist 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();
}
Shubham
quelle
0

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


quelle
0

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.

ivanleoncz
quelle