¿Alguien podría describirme qué es exactamente una entidad HTTP ?
Estoy leyendo la documentación de HTTPClient, pero realmente no entiendo lo que eso significa.
¿Alguien podría describirme qué es exactamente una entidad HTTP ?
Estoy leyendo la documentación de HTTPClient, pero realmente no entiendo lo que eso significa.
Respuestas:
Una entidad HTTP es la mayor parte de una solicitud o respuesta HTTP, que consta de algunos de los encabezados y el cuerpo, si está presente. Parece ser la solicitud o respuesta completa sin la solicitud o la línea de estado (aunque solo ciertos campos de encabezado se consideran parte de la entidad ).
Para ilustrar; aquí hay una solicitud:
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! ... # ┘
Y una respuesta:
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 ... # ┘
&
lugar de &
. ¿No es eso también una entidad? ¿Cual es la diferencia?
Aquí hay 3 casos simples:
Caso 1. Estás cargando 3 archivos en una sola solicitud. Esos 3 archivos son 3 entidades. Cada uno tiene el suyo Content-Type
para indicar qué tipo de archivo es.
Caso 2. Estás viendo una página web. El navegador ha descargado un archivo html como entidad en segundo plano. Dado que la página se puede actualizar continuamente, es posible que obtenga una entidad totalmente diferente más adelante.
Caso 3. Tienes un 304 Not Modified
. No se ha transferido ninguna entidad.
En una palabra, la entidad es una carga útil opcional dentro de un mensaje http (ya sea una solicitud o una respuesta), por lo que es una relación " parte-todo " entre la entidad y el mensaje.
Algunos campos de cabecera se aplican a Message
gustaría Transfer-Encoding
describir la forma de transferencia de mensajes entre los intermediarios, y por lo tanto puede ser añadido o retirado por cualquier aplicación a lo largo de la cadena de petición / respuesta ( hop-by-hop headers
). En comparación, esos campos de encabezado se aplican a Entity
algunas propiedades, que describen el tamaño de la entidad, el tipo, el algoritmo de compresión, etc.
Lectura adicional, citando de RFC 2616 sección 1.4, 4.5 y 4.3:
request chain --------------------------------------> UA -----v----- A -----v----- B -----v----- C -----v----- O <------------------------------------- response chain
La figura anterior muestra tres intermediarios (A, B y C) entre el agente de usuario y el servidor de origen. Un mensaje de solicitud o respuesta que recorra toda la cadena pasará a través de cuatro conexiones independientes.
Hay algunos campos de encabezado que tienen aplicabilidad general tanto para mensajes de solicitud como de respuesta, pero que no se aplican a la entidad que se transfiere . Estos campos de encabezado se aplican solo al mensaje que se transmite .
La codificación de transferencia DEBE utilizarse para indicar cualquier codificación de transferencia aplicada por una aplicación para garantizar la transferencia segura y adecuada del mensaje. Transfer-Encoding es una propiedad del mensaje, no de la entidad, y por lo tanto PUEDE ser agregada o eliminada por cualquier aplicación a lo largo de la cadena de solicitud / respuesta.
message-body = Transfer-Encoding( Content-Encoding(entity-body) )
where Transfer-Encoding
puede estar "fragmentado", que significa cómo transferir el mensaje, y Content-Encoding
puede ser "gzip", que significa cómo comprimir la entidad.
HTTP es un protocolo que se observa cuando se accede a información desde una máquina remota a través de una red. Por lo general, la red es Internet y la máquina remota es un servidor.
Cuando pides información de la persona A a la persona B, le das un mensaje. (Solicitud). La persona B le responde (Respuesta). La solicitud y la respuesta son tipos de mensajes HTTP.
La persona A puede pedirle a la persona B que haga algo, en lugar de pedir información. Digamos que la persona A quiere que la persona B almacene un archivo en un lugar seguro. Entonces, la Persona A pasa ese archivo (Entidad HTTP) a la Persona B y le pide que haga algo (Mensaje HTTP). En este caso, Person pasa una "Entidad". En el contexto de la entidad HTTP, es una carga útil adjunta al mensaje.
Espero que la analogía ayude.
Como se dijo en un comentario de @ hawkeye-parker, parece que Entity ha quedado obsoleto. Realice una búsqueda en este rfc de 2014 y verá sobre las entidades XML y el cuerpo del mensaje, pero nada sobre la entidad Http.
Sin embargo, HttpClient, pero también el cliente JaxRS, tienen una setEntity()
ygetEntity()
método .
Teniendo en cuenta la respuesta aceptada, ¡ambas bibliotecas están equivocadas! HttpClient.setEntity()
no eliminará los encabezados establecidos previamente.
HttpEntity
es lo que va a pasar en Solicitud (con encabezado) y lo que obtiene en Respuesta. Para Get Request, estamos pasando una cadena simple
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity = new HttpEntity<String>(headers);
Para la publicación, vamos a aprobar la clase de entidad completa.
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();
}
La entidad es algo así como un mensaje, consta de un encabezado, donde están los metadatos como ubicación, idioma, codificación ...
Y, opcionalmente, de un cuerpo: su contenido está formateado, etc., como se especifica en el encabezado
Entre las buenas respuestas que tenemos aquí, creo que vale la pena mencionar algo que viene directamente del RFC 2616 (Hypertext Transfer Protocol - HTTP / 1.1) :
Entidad
Los mensajes de solicitud y respuesta PUEDEN transferir una entidad si no están restringidos por el método de solicitud o el código de estado de respuesta. Una entidad consta de campos de encabezado de entidad y un cuerpo de entidad, aunque algunas respuestas solo incluirán los encabezados de entidad.
En pocas palabras: una entidad puede ser transferida, y puede ser el encabezado + cuerpo , o solo el encabezado .
Dado que está el enlace de arriba, me detengo en hacer comentarios adicionales.