Qu'est-ce qu'une entité HTTP exactement?


114

Quelqu'un pourrait-il me décrire ce qu'est exactement une entité HTTP ?

Je lis la documentation HTTPClient, mais je ne comprends pas vraiment ce que cela signifie?


2
Je suis venu ici de cet article sur HTTP: HTTP: Le protocole que tout développeur Web doit savoir si quelqu'un d'autre passe par ici à la recherche d'informations sur le sujet.
Mason240

2
Notez que le terme «entité HTTP» n'apparaît plus dans les dernières spécifications HTTP 1.1 . Il semble que ce soit obsolète. Maintenant, nous pouvons simplement utiliser des "champs d'en-tête" et "corps du message".
Hawkeye Parker

Réponses:


139

Une entité HTTP est la majorité d'une requête ou d'une réponse HTTP, composée de certains des en-têtes et du corps, s'il est présent. Il semble que ce soit la demande ou la réponse entière sans la ligne de demande ou d'état (bien que seuls certains champs d'en-tête soient considérés comme faisant partie de l'entité ).

Pour illustrer; voici une demande:

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

Et une réponse:

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
L'hôte n'est pas un champ d'en-tête d'entité.
Gumbo

Je pensais qu'une entité utilisait &au lieu de &. N'est-ce pas aussi une entité? Quelle est la différence?
CodyBugstein

1
@Imray: &est une référence d'entité de caractère HTML , pas la même chose qu'une entité HTTP .
maerics

2
@lmray: ce sont des entités entièrement différentes. ;) (L'un concerne l' encodage de chaînes dans un texte HTML , l'autre la structuration des informations lorsqu'un navigateur et un serveur se parlent via le protocole HTTP . De plus, l'un est plus déroutant que l'autre. Ou vice versa.; - o)
Sz.

6
Notez que le terme «entité HTTP» n'apparaît plus dans les dernières spécifications HTTP 1.1 . Il semble que ce soit obsolète. Maintenant, nous pouvons simplement nous en tenir aux "champs d'en-tête" et au "corps du message".
Hawkeye Parker

15

Voici 3 cas simples:

Cas 1. Vous téléchargez 3 fichiers en une seule demande. Ces 3 fichiers sont 3 entités. Chacun d'eux a le sien Content-Typepour indiquer de quel type de fichier il s'agit.

Cas 2. Vous consultez une page Web. Le navigateur a téléchargé un fichier html en tant qu'entité en arrière-plan. Étant donné que la page peut être mise à jour en continu, vous pouvez obtenir une entité totalement différente plus tard.

Cas 3. Vous avez un 304 Not Modified. Aucune entité n'a été transférée.

En un mot, Entity est une charge utile facultative à l'intérieur d'un message http (requête ou réponse), il s'agit donc d'une relation " partielle-entière " entre Entity et Message.

Certains champs d' en- tête pour appliquer Messagesouhaite Transfer-Encodingdécrire comment transférer des messages entre les intermédiaires, et ainsi peut être ajouté ou éliminé par toute application le long de la chaîne de requête / réponse ( hop-by-hop headers). En comparaison, ces champs d'en-tête s'appliquent à Entitycertaines propriétés, qui décrivent la taille, le type, l'algorithme de compression de l'entité, etc.

Lectures complémentaires, citant les sections 1.4, 4.5 et 4.3 de la RFC 2616:

  • Une chaîne requête / réponse
     request chain -------------------------------------->
   UA -----v----- A -----v----- B -----v----- C -----v----- O
      <------------------------------------- response chain

La figure ci-dessus montre trois intermédiaires (A, B et C) entre l'agent utilisateur et le serveur d'origine. Un message de demande ou de réponse qui parcourt toute la chaîne passera par quatre connexions distinctes.

  • Champs d'en-tête pour Message ou Entité

Il existe quelques champs d'en-tête qui ont une applicabilité générale pour les messages de demande et de réponse, mais qui ne s'appliquent pas à l'entité transférée . Ces champs d'en-tête s'appliquent uniquement au message en cours de transmission .

  • Les champs d'en-tête du message peuvent être modifiés le long de la chaîne

Le codage de transfert DOIT être utilisé pour indiquer tout codage de transfert appliqué par une application pour assurer un transfert sûr et correct du message. Transfer-Encoding est une propriété du message, pas de l'entité, et PEUT donc être ajouté ou supprimé par toute application le long de la chaîne de demande / réponse.

  • Relation entre le corps du message et le corps de l'entité

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

Transfer-Encodingpeut être "chunked" qui signifie comment transférer le message, et Content-Encodingpeut être "gzip" qui signifie comment compresser l'entité.


Wow, merci d'avoir clarifié la relation "partie-tout" entre entité et message! Le reste ajoute un peu à la confusion, mais dans l'ensemble, cela vaut toujours un vote positif. À votre santé!
Sz.

12

C'est une abstraction représentant une charge utile de demande ou de réponse . Le JavaDoc est clair sur son objectif et les différents types d'entités.


3
+1 pour l'appeler "charge utile", ce qui ajoute finalement un sens à ce terme vide ("entité").
Sz.


2

HTTP est un protocole qui est observé lors de l'accès aux informations depuis une machine distante via un réseau. Habituellement, le réseau est Internet et la machine distante est un serveur.

Lorsque vous demandez des informations de la personne A à la personne B, vous lui donnez un message. (Demande). La personne B vous répond (réponse). La demande et la réponse sont des types de message HTTP.

La personne A peut demander à la personne B de faire quelque chose, au lieu de demander des informations. Disons que la personne A souhaite que la personne B stocke un fichier dans un emplacement sécurisé. Ainsi, la personne A passe ce fichier (entité HTTP) à la personne B et lui demande de faire quelque chose (message HTTP). Dans ce cas, Person passe une "Entité". Dans le contexte de l'entité HTTP, il s'agit d'une charge utile jointe au message.

J'espère que l'analogie a aidé.


2

Comme indiqué dans un commentaire de @ hawkeye-parker, il semble qu'Entity soit obsolète. Effectuez une recherche dans ce rfc 2014 , et vous verrez sur les entités XML et le corps du message, mais rien sur l'entité Http.

Néanmoins, HttpClient, mais aussi le client JaxRS, ont une méthode setEntity()et getEntity().

Compte tenu de la réponse acceptée, les deux bibliothèques se trompent! HttpClient.setEntity()ne supprimera pas les en-têtes précédemment définis.


J'ai trouvé la distinction entre «Entité» (et les «en-têtes d'entité» associés) et «Message» très utile. Cela devient rapidement apparent lorsque vous concevez une bibliothèque réseau et effectuez une analyse d'un message HTTP et de ses différentes incarnations, par exemple un message en plusieurs parties. Malheureusement, les nouvelles RFC fusionnent ces «classes» distinctes en une seule et nous devons introduire notre propre terminologie, ou nous en tenir à «Entité».
CouchDeveloper

1

HttpEntityest ce que vous allez passer dans Request (avec en-tête) et ce que vous obtenez dans Response. Pour Get Request, nous transmettons une chaîne simple

 HttpHeaders headers = new HttpHeaders();
 headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
 HttpEntity<String> entity = new HttpEntity<String>(headers);

Pour la publication, nous allons passer la classe d'entité complète

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();
}

0

L'entité est quelque chose comme un message, elle se compose d'un en-tête, où se trouvent des métadonnées telles que l'emplacement, la langue, l'encodage ...

Et éventuellement d'un corps - son contenu est formaté, etc. comme spécifié dans l'en-tête


0

Parmi les bonnes réponses que nous avons ici, je pense qu'il vaut la peine de mentionner quelque chose qui vient directement de la RFC 2616 (Hypertext Transfer Protocol - HTTP / 1.1) :

Entité

Les messages de demande et de réponse PEUVENT transférer une entité s'ils ne sont pas autrement limités par la méthode de demande ou le code d'état de réponse. Une entité se compose de champs d'en-tête d'entité et d'un corps d'entité, bien que certaines réponses n'incluent que les en-têtes d'entité.

En un mot: une entité peut être transférée, et cela peut être l'en- tête + le corps , ou simplement l'en- tête .

Puisqu'il y a le lien ci-dessus, je me retiens de faire des commentaires supplémentaires.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.