O que exatamente é uma Entidade HTTP?


114

Alguém poderia me descrever o que exatamente é uma entidade HTTP ?

Estou lendo a documentação do HTTPClient, mas não entendo realmente o que isso significa.


2
Eu vim aqui depois de escrever sobre HTTP: HTTP: O protocolo que todo desenvolvedor da web deve saber se alguém passar por aqui procurando informações sobre o assunto.
Mason240

2
Observe que o termo "entidade HTTP" não aparece mais nas especificações HTTP 1.1 mais recentes . Parece que ele foi suspenso. Agora podemos usar apenas "campos de cabeçalho" e "corpo da mensagem".
Hawkeye Parker

Respostas:


139

Uma entidade HTTP é a maior parte de uma solicitação ou resposta HTTP, consistindo em alguns dos cabeçalhos e no corpo, se houver. Parece ser a solicitação ou resposta inteira sem a linha de solicitação ou status (embora apenas alguns campos de cabeçalho sejam considerados parte da entidade ).

Ilustrar; aqui está um pedido:

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 uma resposta:

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
Host não é um campo de cabeçalho de entidade.
Gumbo

Achei que uma entidade estava usando em &vez de &. Não é uma entidade também? Qual é a diferença?
CodyBugstein

1
@Imray: &é uma referência de entidade de caractere HTML , não o mesmo que uma Entidade HTTP .
maerics

2
@lmray: são entidades totalmente diferentes. ;) (Um é sobre a codificação de strings em um texto HTML , o outro é sobre a estruturação de informações quando um navegador e um servidor se comunicam por meio do protocolo HTTP . Além disso, um é mais confuso do que o outro. Ou vice-versa.; - o)
Sz.

6
Observe que o termo "entidade HTTP" não aparece mais nas especificações HTTP 1.1 mais recentes . Parece que ele foi suspenso. Agora podemos nos limitar a "campos de cabeçalho" e "corpo da mensagem".
Hawkeye Parker

15

Aqui estão 3 casos simples:

Caso 1. Você está enviando 3 arquivos em uma única solicitação. Esses 3 arquivos são 3 entidades. Cada um deles tem seu próprio Content-Typepara indicar que tipo de arquivo é.

Caso 2. Você está visualizando uma página da web. O navegador baixou um arquivo html como entidade em segundo plano. Como a página pode ser atualizada continuamente, você pode obter uma entidade totalmente diferente mais tarde.

Caso 3. Você tem um 304 Not Modified. Nenhuma entidade foi transferida.

Em uma palavra, Entidade é uma carga útil opcional dentro de uma mensagem http (solicitação ou resposta), portanto, é uma relação " parte-todo " entre Entidade e Mensagem.

Alguns campos de cabeçalho para aplicar Messagecomo Transfer-Encodingdescrevem como para transferir mensagens entre intermediários, e, portanto, pode ser adicionado ou removido por qualquer aplicação ao longo da cadeia de pedido / resposta ( hop-by-hop headers). Em comparação, esses campos de cabeçalho se aplicam a Entityalgumas propriedades, que descrevem o tamanho da entidade, tipo, algoritmo de compressão, etc ...

Leitura adicional, citando RFC 2616 seção 1.4, 4.5 e 4.3:

  • Uma cadeia de solicitação / resposta
     request chain -------------------------------------->
   UA -----v----- A -----v----- B -----v----- C -----v----- O
      <------------------------------------- response chain

A figura acima mostra três intermediários (A, B e C) entre o agente do usuário e o servidor de origem. Uma mensagem de solicitação ou resposta que percorre toda a cadeia passará por quatro conexões separadas.

  • Campos de cabeçalho para mensagem ou entidade

Existem alguns campos de cabeçalho que têm aplicabilidade geral para mensagens de solicitação e resposta, mas que não se aplicam à entidade que está sendo transferida . Esses campos de cabeçalho se aplicam apenas à mensagem que está sendo transmitida .

  • Os campos do cabeçalho da mensagem podem ser alterados ao longo da cadeia

A codificação de transferência DEVE ser usada para indicar qualquer codificação de transferência aplicada por um aplicativo para garantir a transferência correta e segura da mensagem. Transfer-Encoding é uma propriedade da mensagem, não da entidade e, portanto, PODE ser adicionada ou removida por qualquer aplicativo ao longo da cadeia de solicitação / resposta.

  • Relação entre o corpo da mensagem e o corpo da entidade

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

onde Transfer-Encodingpode ser "fragmentado", que significa como transferir a mensagem, e Content-Encodingpode ser "gzip" que significa como compactar a entidade.


Uau, obrigado por esclarecer a relação "parte-todo" entre entidade e mensagem! O resto meio que aumenta a confusão, mas no geral, ainda vale um voto positivo. Felicidades!
Sz.

12

É uma abstração que representa uma carga útil de solicitação ou resposta . O JavaDoc é claro em sua finalidade e vários tipos de entidade.


3
+1 por chamá-lo de "carga útil", o que finalmente adiciona algum significado a esse termo vazio ("entidade").
Sz.


2

HTTP é um protocolo observado ao acessar informações de uma máquina remota por meio de uma rede. Normalmente a rede é a Internet e a máquina remota é um servidor.

Quando você pede informações da pessoa A para a pessoa B, você envia uma mensagem a ela. (Solicitação). A pessoa B responde para você (resposta). Solicitação e resposta são tipos de mensagens HTTP.

A pessoa A pode pedir à pessoa B para fazer algo, em vez de pedir informações. Digamos que a pessoa A deseja que a pessoa B armazene um arquivo em um local seguro. Então, a Pessoa A passa esse arquivo (Entidade HTTP) para a Pessoa B e pede a ela para fazer algo (Mensagem HTTP). Nesse caso, Pessoa está passando uma "Entidade". No contexto da Entidade HTTP, é uma carga anexada à mensagem.

Espero que a analogia tenha ajudado.


2

Como disse em um comentário de @ hawkeye-parker, parece que o Entity foi preterido. Faça uma pesquisa neste rfc de 2014 e você verá sobre entidades XML e corpo de mensagem, mas nada sobre entidade Http.

No entanto, o HttpClient, mas também o cliente JaxRS, têm um método setEntity()e getEntity().

Considerando a resposta aceita, ambas as bibliotecas estão erradas! HttpClient.setEntity()não removerá cabeçalhos configurados anteriormente.


Achei a distinção de "Entidade" (e "cabeçalhos de entidade" relacionados) e "Mensagem" bastante útil. Isso se torna rapidamente aparente quando você projeta uma biblioteca de rede e executa uma análise de uma mensagem HTTP e suas várias encarnações, por exemplo, uma mensagem com várias partes. Infelizmente, os novos RFCs mesclam essas "classes" distintas em uma e precisamos introduzir nossa própria terminologia ou ficar com "Entidade".
CouchDeveloper

1

HttpEntityé o que você vai passar em Request (com cabeçalho) e o que vai receber em Response. Para Get Request, estamos passando uma string simples

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

Para Post, vamos passar na Classe de Entidade 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

Entidade é algo como uma mensagem, consiste em um cabeçalho, onde estão os metadados como localização, idioma, codificação ...

E, opcionalmente, de um corpo - o conteúdo é formatado etc. conforme especificado no cabeçalho


0

Entre as boas respostas que temos aqui, creio que vale a pena citar algo que vem diretamente do RFC 2616 (Hypertext Transfer Protocol - HTTP / 1.1) :

Entidade

As mensagens de solicitação e resposta PODEM transferir uma entidade, se não houver restrição pelo método de solicitação ou código de status de resposta. Uma entidade consiste em campos de cabeçalho de entidade e um corpo de entidade, embora algumas respostas incluam apenas os cabeçalhos de entidade.

Resumindo: uma Entidade pode ser transferida, e pode ser o cabeçalho + corpo ou apenas o cabeçalho .

Como existe o link acima, me detenho em fazer comentários adicionais.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.