Cos'è esattamente un'entità HTTP?


114

Qualcuno potrebbe descrivermi cos'è esattamente un'entità HTTP ?

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


2
Sono venuto qui da questo articolo su HTTP: HTTP: il protocollo che ogni sviluppatore web deve sapere se qualcun altro arriva qui alla ricerca di informazioni sull'argomento.
Mason240

2
Tieni presente che il termine "entità HTTP" non compare più nelle ultime specifiche HTTP 1.1 . Sembra che sia stato deprecato. Ora possiamo usare solo "campi di intestazione" e "corpo del messaggio".
Hawkeye Parker

Risposte:


139

Un'entità HTTP è la maggior parte di una richiesta o risposta HTTP, costituita da alcune delle intestazioni e dal corpo, se presente. Sembra essere l'intera richiesta o risposta senza la richiesta o la riga di stato (sebbene solo alcuni campi di intestazione siano considerati parte dell'entità ).

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

3
L'host non è un campo di intestazione dell'entità.
Gumbo

Pensavo che un'entità stesse usando &invece di &. Non è anche quella un'entità? Qual è la differenza?
CodyBugstein

1
@Imray: &è un riferimento a un'entità carattere HTML , non è la stessa di un'entità HTTP .
maerie

2
@lmray: sono entità completamente diverse. ;) (Uno riguarda la codifica di stringhe in un testo HTML , l'altro riguarda la strutturazione delle informazioni quando un browser e un server parlano tra loro tramite il protocollo HTTP . Inoltre, uno è più confuso dell'altro. O viceversa.; - o)
Sz.

6
Tieni presente che il termine "entità HTTP" non compare più nelle ultime specifiche HTTP 1.1 . Sembra che sia stato deprecato. Ora possiamo limitarci a "campi di intestazione" e "corpo del messaggio".
Hawkeye Parker

15

Ecco 3 semplici casi:

Caso 1. Stai caricando 3 file in una singola richiesta. Quei 3 file sono 3 entità. Ognuno di loro ha il suo Content-Typeper indicare che tipo di file è.

Caso 2. Stai 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 file 304 Not Modified. Nessuna entità è stata trasferita.

In una parola, Entity è un payload opzionale all'interno di un messaggio http (richiesta o risposta), quindi è una relazione " parziale " tra Entity e Message.

Alcuni campi di intestazione si applicano a Messagesimili Transfer-Encodingdescrivono come trasferire messaggi tra intermediari, e quindi POSSONO essere aggiunti o rimossi da qualsiasi applicazione lungo la catena di richiesta / risposta ( hop-by-hop headers). In confronto, questi campi di intestazione si applicano ad Entityalcune proprietà, che descrivono la dimensione, il tipo, l'algoritmo di compressione dell'entità, ecc ...

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

  • Una catena di 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 il server di origine. Un messaggio di richiesta o risposta che percorre l'intera catena passerà attraverso quattro connessioni separate.

  • Campi di intestazione per Messaggio o Entità

Ci sono alcuni campi di intestazione che hanno applicabilità generale sia per i messaggi di richiesta che per i messaggi di risposta, ma che non si applicano all'entità da trasferire . Questi campi di intestazione si applicano solo al messaggio trasmesso .

  • I campi dell'intestazione del messaggio possono essere modificati lungo la catena

La codifica di trasferimento DEVE essere utilizzata per indicare le codifiche di trasferimento applicate da un'applicazione per garantire un trasferimento sicuro e corretto del messaggio. La codifica del trasferimento è una proprietà del messaggio, non dell'entità, e quindi PU essere aggiunta o rimossa da qualsiasi applicazione lungo la catena di richiesta / risposta.

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

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

dove Transfer-Encodingpuò essere "chunked" che significa come trasferire il messaggio, e Content-Encodingpotrebbe essere "gzip" che sta per come comprimere l'entità.


Wow, grazie per aver chiarito la relazione "parte-tutto" tra entità e messaggio! Il resto un po 'si aggiunge alla confusione, ma nel complesso vale comunque un voto positivo. Saluti!
Sz.

12

È un'astrazione che rappresenta una richiesta o un payload di risposta . Il JavaDoc è chiaro sul suo scopo e sui vari tipi di entità.


3
+1 per chiamarlo "carico utile", che alla fine aggiunge un significato a quel termine vuoto ("entità").
Sz.


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 alla persona A alla persona B, gli dai un messaggio. (Richiesta). La persona B ti risponde (risposta). Richiesta e risposta sono tipi di messaggi HTTP.

La persona A può chiedere alla persona B di fare qualcosa, invece di chiedere informazioni. Supponiamo che la persona A desideri che la persona B memorizzi 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, Persona sta passando una "Entità". Nel contesto di HTTP Entity, è un payload allegato al messaggio.

Spero che l'analogia abbia aiutato.


2

Come detto in un commento di @ hawkeye-parker, sembra che Entity sia stato deprecato. Fai una ricerca in questo rfc 2014 e vedrai le entità XML e il corpo del messaggio, ma nulla sull'entità Http.

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

Considerando la risposta accettata, entrambe le biblioteche hanno torto! HttpClient.setEntity()non rimuoverà le intestazioni impostate in precedenza.


Ho trovato molto utile la distinzione tra "Entità" (e relativi "intestazioni entità") e "Messaggio". Ciò diventa subito evidente quando si progetta una libreria di rete ed si esegue un'analisi di un messaggio HTTP e delle sue varie incarnazioni, ad esempio un messaggio multipart. Sfortunatamente, le nuove RFC uniscono queste "classi" distinte in una sola e dobbiamo introdurre la nostra terminologia o restare con "Entità".
CouchDeveloper

1

HttpEntityè ciò che si passa in Request (con intestazione) e ciò che si ottiene in Response. Per Get Request stiamo passando una semplice stringa

 HttpHeaders headers = new HttpHeaders();
 headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
 HttpEntity<String> entity = new HttpEntity<String>(headers);

Per Post Passeremo alla classe Entity 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();
}

0

L'entità è qualcosa di simile a un messaggio, consiste nell'intestazione, dove sono i metadati come posizione, lingua, codifica ...

E facoltativamente di un corpo: il contenuto è formattato ecc. Come specificato nell'intestazione


0

Tra le buone risposte che abbiamo qui, credo che valga la pena menzionare qualcosa che proviene direttamente dall'RFC 2616 (Hypertext Transfer Protocol - HTTP / 1.1) :

Entità

I messaggi di richiesta e risposta POSSONO trasferire un'entità se non diversamente limitato dal metodo di richiesta o dal codice di stato della risposta. Un'entità è composta da campi di intestazione di entità e da un corpo di entità, sebbene alcune risposte includano solo le intestazioni di entità.

In poche parole: un'entità può essere trasferita e può essere intestazione + corpo o solo intestazione .

Dato che c'è il collegamento sopra, mi trattengo dal fare ulteriori commenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.