2012-02-08 23 views
90

Qualcuno potrebbe descrivermi cosa è esattamente un'entità HTTP ?Che cosa è esattamente un'entità HTTP?

Sto leggendo la documentazione di HTTPClient, ma non capisco cosa significhi?

+0

L'intera risposta. – Mob

+2

Sono arrivato da questo articolo su HTTP: [HTTP: Il protocollo che ogni sviluppatore Web deve conoscere] (http://net.tutsplus.com/tutorials/tools-and-tips/http-the-protocol-every-web -developer-must-know-part-1 /) se qualcun altro viene qui in cerca di informazioni sull'argomento. – Mason240

+2

Si noti che il termine "entità HTTP" non appare più nelle [ultime specifiche HTTP 1.1] (http://tools.ietf.org/html/rfc7230). Sembra che sia stato deprecato. Ora possiamo solo usare "campi di intestazione" e "corpo del messaggio". –

risposta

111

Un HTTP entity è la maggioranza di una richiesta o risposta HTTP, costituita da some of the headers e il corpo, se presente. Sembra essere l'intera richiesta o risposta senza la richiesta o la riga di stato (anche se solo certain header fields are considered part of the entity).

Per illustrare; ecco una richiesta:

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

e una risposta:

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

Grazie mille !!!!!!!!!! – helloThere

+2

* Host * non è un campo dell'intestazione dell'entità. – Gumbo

+0

Ho pensato che un'entità stesse usando '&' invece di '&'. Non è anche un'entità? Qual è la differenza? – CodyBugstein

0

Entity è qualcosa come un messaggio, si compone di intestazione, dove sono i metadati quali la posizione, lingua, codifica ...

e opzionalmente di un corpo - è contenuto viene formattato ecc come specificato nell'intestazione

11

È un'astrazione che rappresenta una richiesta o una risposta carico utile. Lo JavaDoc è chiaro sul suo scopo e vari tipi di entità.

+3

+1 per chiamarlo "payload", che alla fine aggiunge un significato al termine vuoto ("entità"). –

13

Qui ci sono 3 casi semplici:

Caso 1. Si sta caricando 3 file in una singola richiesta. Questi 3 file sono 3 entità. Ognuno di loro ha il proprio Content-Type per indicare che tipo di file è.

Caso 2. Si sta visualizzando una pagina Web. Il browser ha scaricato un file html come entità in background. Poiché la pagina potrebbe essere aggiornata continuamente, potresti ottenere un'entità completamente diversa in seguito.

Caso 3. Hai un 304 Not Modified. Nessuna entità è stata trasferita.

In una parola, Entity è un payload facoltativa all'interno di un messaggio http (sia richiesta o risposta), quindi è una relazione "parte-tutto" tra le entità e il messaggio.

Alcuni campi di intestazione applicano a Message come Transfer-Encoding descrivono come trasferire messaggi tra intermediari, e quindi può essere aggiunto o rimosso da qualsiasi applicazione lungo la catena richiesta/risposta (hop-by-hop headers). In confronto, tali campi di intestazione si applicano a Entity sono alcune proprietà, che descrivono dimensioni, tipo, algoritmo di compressione, ecc ...

Ulteriori letture, citando da RFC 2616 sezione 1.4, 4.5 e 4.3:

  • Una catena richiesta/risposta
 request chain --------------------------------------> 
    UA -----v----- A -----v----- B -----v----- C -----v----- O 
     <------------------------------------- response chain 

La figura sopra mostra tre intermediari (A, B, e C) tra l'agente utente e server di origine. Un messaggio di richiesta o risposta che percorre l'intera catena passerà attraverso quattro connessioni separate.

  • campi di intestazione sia per il messaggio o Entity

Ci sono alcuni campi di intestazione che hanno applicabilità generale sia per i messaggi di richiesta e di risposta, ma che non si applicano al l'entità essendo trasferito. Questi campi di intestazione si applicano solo a il messaggio viene trasmesso.

  • campi di intestazione per un messaggio possono essere modificati lungo la catena

Codifica di trasferimento deve essere utilizzato per indicare qualsiasi trasferimento-codifiche applicati da un'applicazione per assicurare il trasferimento sicuro e corretto del Messaggio. Transfer-Encoding è una proprietà del messaggio, non dell'entità, e pertanto può essere aggiunta o rimossa da qualsiasi applicazione lungo la catena richiesta/risposta.

  • Relazione tra il corpo del messaggio e corpo dell'entità

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

dove Transfer-Encoding può essere "Chunked" che significa come trasferire il messaggio, e Content-Encoding può essere "gzip" che indica come comprimere l'entità.

+0

Wow, grazie per aver chiarito la relazione "parziale" tra entità e messaggio! Il resto è un po '"aggiunge alla confusione, ma nel complesso, vale ancora un upvote. Saluti! –

2

Come detto in un commento di @ hawkeye-parker, sembra che Entity sia stata deprecata. Crea un search in this 2014 rfc e vedrai le entità XML e il corpo del messaggio, ma nulla sull'entità Http.

Tuttavia, HttpClient, ma anche client JaxRS, hanno un metodo setEntity() e getEntity().

Considerando la risposta accettata, entrambe le librerie sono sbagliate! HttpClient.setEntity() non rimuoverà le intestazioni impostate in precedenza.

+0

Ho trovato abbastanza utile la distinzione di "Entità" (e relativi "entità-intestazioni") e "Messaggio". Ciò diventa rapidamente evidente quando si progetta una libreria di rete e si esegue un'analisi di un messaggio HTTP e delle sue varie incarnazioni, ad es. un messaggio multipart. Sfortunatamente, le nuove RFC fondono queste "classi" distinte in una e abbiamo bisogno di introdurre la nostra terminologia o attenerci a "Entità". – CouchDeveloper

2

HTTP è un protocollo che viene osservato quando si accede alle informazioni da una macchina remota attraverso una rete. Di solito la rete è internet e la macchina remota è un server.

Quando chiedi informazioni dalla persona A alla persona B, gli dai un messaggio. (Richiesta). Persona B risponde a te (Risposta). La richiesta e la risposta sono tipi di messaggi HTTP.

La persona A può chiedere alla persona B di fare qualcosa, invece di chiedere informazioni. Supponi che la Persona A desideri che la Persona B archivi un file in un luogo sicuro.Quindi, la Persona A passa quel file (Entità HTTP) alla Persona B e gli chiede di fare qualcosa (Messaggio HTTP). In questo caso, la persona sta passando una "entità". Nel contesto di HTTP Entity, è un payload associato al messaggio.

Spero che l'analogia abbia aiutato.

0

Tra le buone risposte che abbiamo qui, credo che vale la pena di menzionare qualcosa che viene direttamente dal RFC 2616 (Hypertext Transfer Protocol - HTTP/1.1):

Entity

Request e Response messaggi possono trasferire un'entità se non altrimenti limitato dal metodo di richiesta o dal codice di stato della risposta. Un'entità consiste di di campi dell'entità dell'intestazione e un corpo dell'entità, sebbene alcune risposte includano solo le intestazioni dell'entità.

In poche parole: un'entità può essere trasferito, e può essere la intestazione + corpo, o solo il intestazione.

Dato che c'è il link sopra, mi fermo a fare commenti aggiuntivi.

Problemi correlati