tesis - ¿Qué es exactamente una entidad HTTP?
tesis sobre youtube pdf (8)
¿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.
Aquí hay 3 casos simples:
Caso 1. Estás cargando 3 archivos en una sola solicitud. Esos 3 archivos son 3 entidades. Cada uno de ellos tiene su propio tipo de 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, puede obtener una entidad totalmente diferente más adelante.
Caso 3. Tienes un 304 Not Modified
. Ninguna entidad ha sido transferida.
En una palabra, Entity es una carga útil opcional dentro de un mensaje http (ya sea solicitud o respuesta), por lo que es una relación " parcial-total " entre Entity y Message.
Algunos campos de encabezado se aplican a Message
como Transfer-Encoding
Describen cómo transferir mensajes entre intermediarios, y PUEDEN ser añadidos o eliminados por cualquier aplicación a lo largo de la cadena de solicitud / respuesta ( hop-by-hop headers
). En comparación, los campos de encabezado que se aplican a la Entity
son algunas propiedades que describen el tamaño, el tipo, el algoritmo de compresión, etc. de la entidad.
Lectura adicional, citando RFC 2616 sección 1.4, 4.5 y 4.3:
- Una cadena de solicitud / respuesta
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 recorre toda la cadena pasará por cuatro conexiones separadas.
- Campos de encabezado para Mensaje o Entidad
Hay algunos campos de encabezado que tienen una aplicabilidad general para los mensajes de solicitud y respuesta, pero que no se aplican a la entidad que se transfiere . Estos campos de encabezado se aplican solo al mensaje que se está transmitiendo .
- Los campos de encabezado para el mensaje se pueden cambiar a lo largo de la cadena
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. La codificación de transferencia es una propiedad del mensaje, no de la entidad, y PUEDE ser agregada o eliminada por cualquier aplicación a lo largo de la cadena de solicitud / respuesta.
- Relación entre el cuerpo del mensaje y el cuerpo de la entidad
message-body = Transfer-Encoding( Content-Encoding(entity-body) )
donde Transfer-Encoding
puede ser "fragmentado", lo que significa cómo transferir el mensaje, y Content-Encoding
puede ser "gzip" que representa cómo comprimir la entidad.
Como se dijo en un comentario de @ hawkeye-parker, parece que Entity ha quedado en desuso. Haga una búsqueda en este rfc 2014 , y verá más 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 un setEntity()
y getEntity()
.
Considerando la respuesta aceptada, ¡ambas bibliotecas están equivocadas! HttpClient.setEntity()
no eliminará los encabezados establecidos previamente.
Entity es algo así como un mensaje, consiste en un encabezado, donde hay 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 proviene directamente del RFC 2616 (Protocolo de transferencia de hipertexto - HTTP / 1.1) :
Entidad
Los mensajes de solicitud y respuesta PUEDEN transferir una entidad si no está restringida por el método de solicitud o el código de estado de la 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 simplemente el encabezado .
Como ese es el enlace de arriba, me detengo a hacer comentarios adicionales.
Es una abstracción que representa una carga útil de solicitud o respuesta. JavaDoc es claro en su propósito y en varios tipos de entidades.
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 solicita información de la persona A a la persona B, le da un mensaje. (Solicitud). La persona B te responde (Respuesta). Solicitud y respuesta son tipos de mensajes HTTP.
La persona A puede pedirle a la persona B que haga algo, en lugar de pedir información. Diga, la persona A quiere que la persona B almacene un archivo en una ubicación segura. Entonces, la Persona A pasa ese archivo (Entidad HTTP) a la Persona B y le pide que haga algo (Mensaje HTTP). En este caso, la Persona está pasando una "Entidad". En el contexto de la Entidad HTTP, es una carga útil adjunta con el mensaje.
Espero que la analogía haya ayudado.
Una entidad HTTP es la mayoría de una solicitud o respuesta HTTP, que consta de algunos de los encabezados y el cuerpo, si está presente. Parece ser toda la solicitud o respuesta sin la solicitud o 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 ... # ┘