2012-02-08 13 views
90

¿Podría alguien describirme exactamente qué es una entidad HTTP ?¿Qué es exactamente una entidad HTTP?

Estoy leyendo la documentación HTTPClient, pero realmente no entiendo lo que eso significa?

+0

Toda la respuesta. – Mob

+2

Vine aquí desde este escrito en HTTP: [HTTP: El protocolo que todo desarrollador web debe saber] (http://net.tutsplus.com/tutorials/tools-and-tips/http-the-protocol-every-web -developer-must-know-part-1 /) si alguien más viene aquí buscando información sobre el tema. – Mason240

+2

Tenga en cuenta que el término "entidad HTTP" ya no aparece en las [últimas especificaciones HTTP 1.1] (http://tools.ietf.org/html/rfc7230). Parece que ha sido desaprobado. Ahora solo podemos usar "campos de encabezado" y "cuerpo del mensaje". –

Respuesta

111

Un HTTP entity es la mayoría de una solicitud o respuesta HTTP, que consiste en some of the headers y el cuerpo, si está presente. Parece ser toda la solicitud o respuesta sin la solicitud o línea de estado (aunque solo certain header fields are considered part of the entity).

Para ilustrar; aquí está una petición:

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 ...   # ┘ 
+0

Muchas gracias !!!!!!!!!! – helloThere

+2

* Host * no es un campo de encabezado de entidad. – Gumbo

+0

Pensé que una entidad estaba usando '&' en lugar de '&'. ¿No es eso una entidad también? ¿Cual es la diferencia? – CodyBugstein

0

Entidad es algo así como un mensaje, que consta de cabecera, ¿dónde están los metadatos tales como la ubicación, lang, codificación ...

y, opcionalmente, de un cuerpo - que el contenido se formatea etc como se especifica en la cabecera

11

Es una abstracción que representa una solicitud o respuesta carga útil. El JavaDoc es claro en cuanto a su propósito y a varios tipos de entidades.

+3

+1 para llamarlo "carga útil", que finalmente agrega algún significado a ese término vacío ("entidad"). –

13

Aquí hay 3 casos simples:

Caso 1. Estás subir 3 archivos en una sola solicitud. Esos 3 archivos son 3 entidades. Cada uno de ellos tiene su propio 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 304 Not Modified. Ninguna entidad ha sido transferida.

En una palabra, entidad es una carga útil opcional dentro de un mensaje de http (ya sea petición o respuesta), por lo que es una relación "parte-todo" entre la entidad y el mensaje.

algunos campos de cabecera se aplican a Message como Transfer-Encoding describen cómo transferir 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 son algunas propiedades que describen el tamaño, tipo, algoritmo de compresión, etc. de la entidad ...

Lectura adicional, citando de RFC 2616 las secciones 1.4, 4.5 y 4.3:

  • Una cadena de petición/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 cabecera o bien por mensaje o Entidad

Hay unos pocos campos de cabecera que tienen aplicabilidad general para ambos mensajes de solicitud y respuesta, pero que no se aplican a la entidad siendo transferido. Estos campos de encabezado se aplican solo al , el mensaje que se está transmitiendo.

  • campos de cabecera para mensaje podría ser cambiado a lo largo de la cadena

Transfer-Encoding DEBE ser utilizado para indicar cualquier transferencia-codificaciones aplicadas por una aplicación para garantizar la transferencia segura y adecuada de la 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 cuerpo de la entidad

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

donde Transfer-Encoding puede ser "fragmentada", que significa la forma de transferir el mensaje, y Content-Encoding puede ser "gzip" que representa cómo comprimir la entidad.

+0

¡Guau, gracias por aclarar la relación "parte-todo" entre entidad y mensaje! El resto se suma a la confusión, pero en general, vale la pena un voto positivo. ¡Aclamaciones! –

2

Como dije en un comentario de @ hawkeye-parker, parece que Entity ha quedado en desuso. Haga un search in this 2014 rfc, y verá sobre las entidades XML y el cuerpo del mensaje, pero nada sobre la entidad Http. No obstante, HttpClient, pero también el cliente JaxRS, tienen un método setEntity() y getEntity().

Considerando la respuesta aceptada, ¡ambas bibliotecas están equivocadas! HttpClient.setEntity() no eliminará los encabezados previamente establecidos.

+0

Encontré la distinción de "Entidad" (y "encabezados de entidad" relacionados) y "Mensaje" bastante útil. Esto se hace evidente rápidamente cuando diseña una biblioteca de red y realiza un análisis de un mensaje HTTP y sus diversas encarnaciones, p. un mensaje multiparte. Lamentablemente, los nuevos RFC combinan estas distintas "clases" en una y tenemos que introducir nuestra propia terminología, o apegarnos a "Entidad". – CouchDeveloper

2

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 pedir 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.

0

Entre las buenas respuestas que tenemos aquí, creo que vale la pena mencionar algo que viene directamente de la RFC 2616 (Hypertext Transfer Protocol - HTTP/1.1):

Entidad

solicitud y respuesta mensajes pueden transferir una entidad si de lo contrario, restringido por el método de solicitud o el código de estado de la respuesta. Una entidad consiste en de campos de entidad-encabezado y un cuerpo-entidad, aunque algunas respuestas solo incluirán los encabezados de entidad.

En una pocas palabras: una entidad puede ser transferida, y que puede ser la cabecera + cuerpo, o simplemente la cabecera.

Dado que hay el enlace de arriba, me detengo a mí mismo en la realización de comentarios adicionales.