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?
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?
Réponses:
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 ... # ┘
&
au lieu de &
. N'est-ce pas aussi une entité? Quelle est la différence?
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-Type
pour 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 Message
souhaite Transfer-Encoding
dé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 à Entity
certaines 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:
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.
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 .
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.
message-body = Transfer-Encoding( Content-Encoding(entity-body) )
où Transfer-Encoding
peut être "chunked" qui signifie comment transférer le message, et Content-Encoding
peut être "gzip" qui signifie comment compresser l'entité.
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é.
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.
HttpEntity
est 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();
}
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
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.