Blog‎ > ‎

O protocolo Http - estruturas específicas das mensagens

postado em 25 de mai de 2011 12:51 por Usuário desconhecido
por Filipe Abelha

No post anterior começamos a falar sobre o protocolo Http. Continuando no assunto, hoje falaremos sobre as estruturas específicas das mensagens que compõem o protocolo.


Cabeçalho

O cabeçalho é composto por um conjunto de campos que podem ser gerais a todas as mensagens (general), de request, de response e de entidade. A seguir serão enumerados os campos de cabeçalho serparados por suas categorias:
  • Campos General
Podem ser utilizado pelas mensagens de request e de response.
  • Cache-Control - especifica diretivas que devem ser seguidos pelos mecanismos de cache por toda a transação de request/response; 
  • Connection - permite ao emissor da mensagem especificar opções que são desejadas especificamente para a conexão atual e que não podem ser comunicadas por proxies através de outras conexões; 
  • Date - data e hora da mensagem; 
  • Pragma - permite ao emissor da mensagem especificar diretivas específicas da implementação que podem ser aplicadas a qualquer destinatário ao longo do da cadeia de request/response
  • Trailer - indica que o conjunto de campos do cabeçalho se encontram no trailer da mensagem; 
  • Transfer-Encoding - encoding utilizado no corpo da entidade; 
  • Upgrade - permite que o emissor especifique os protocolos de comunicação adicionais suportados e que o servidor poderia utilizar caso "ache" apropriado alterar o protocolo;
  • Via - é utilizado por gateways e proxies para indicar protocolos intermediários; 
  • Warning - apresenta informações adicionais sobre o estado ou transformação da mensagem que não pode ser refletida na mensagem.

  • Campos Request
Exclusivos das mensagens de requests.
  • Accept - especifica certos tipos de mídia que são aceitos como resposta;
  • Accept-Charset - especifica qual conjunto de caracteres é aceito como resposta;
  • Accept-Encoding - especifica o encoding do conteúdo que é aceito como resposta;
  • Accept-Language - especifica a linguagem natural preferencial da resposta;
  • Authorization - contém as informações de autenticação do cliente;
  • Expect - indica quais comportamentos especiais do servidor são esperados pelo cliente;
  • From - contém o e-mail do usuário humano que controla o client;
  • Host - especifica o host de internet e o número da porta do recurso requerido;
  • If-Match - é utilizado como verificação por um método da mensagem;
  • If-Modified-Since - é utilizado como verificação por um método da mensagem;
  • If-None-Match - é utilizado como verificação por um método da mensagem;
  • If-Range - é utilizado como verificação por um método da mensagem;
  • If-Unmodified-Since - é utilizado como verificação por um método da mensagem;
  • Max-Forwards - é utilizado pelos métodos TRACE e OPTIONS para limitar o número de gateways e de proxies que podem re-encaminhar o request;
  • Proxy-Authorization - contém informações de autenticação para proxies;
  • Range - indica o intervalo de bytes do corpo da entidade;
  • Referer - contém o endereço dos recursos;
  • TE - indica qual extensão de código de transferência é aceito no response;
  • User-Agent - contém as informações do usuário agente que iniciou o request.

  • Campos Response
Exclusivos das mensagens de response.
  • Accept-Ranges - permite ao servidor indicar o intervalo de requests aceitos para um recurso;
  • Age - contém a estimativa do originador da mensagem do tempo desde a resposta gerada no servidor de origem;
  • ETag - contém o valor atual da tag da entidade;
  • Location - é usado para redirecionar o destinatário para uma URL diferente informada no request, para completar o request ou para identificar um novo recurso;
  • Proxy-Authenticate - contém o esquema e os parâmetros de autenticação para o proxy para este endereço;
  • Retry-After - indica o quanto é esperado que o serviço fique indisponível para o cliente;
  • Server - contém informações sobre o software utilizado pelo servidor de origem para processar o request;
  • Vary - indica o conjunto de campos de cabeçalho do request que podem ser utilizados em cache na resposta que podem ser utilizados nos requests subsequentes sem revalidações;
  • WWW-Authenticate - contém o esquema e os parâmetros de autenticação aplicáveis à URL indicada pelo request.

  • Entidade
Podem ser utilizados pelas mensagens de request e de response. Contém informações sobre o corpo da entidade ou, caso este não exista, sobre os recursos indicados pelo request. É composto pelos campos:
  • Allow - identifica o conjunto de métodos suportados pelo recurso identificado pelo request;
  • Content-Encoding - especifica o encoding do corpo da entidade;
  • Content-Language - especifica a linguagem natural aplicados no corpo da entidade
  • Content-Length - indica o tamanho do corpo da entidade;
  • Content-Location - contém informações sobre o local da entidade quando ela é acessível de um local diferente do indicado pelo request;
  • Content-MD5 - contém o MD5 do corpo da mensagem;
  • Content-Range - é utilizado para indicar a posição do pedaço de um corpo da entidade na entidade inteira a ser inserido;
  • Content-Type - indica qual o tipo de mídia de um corpo de entidade;
  • Expires - indica a data e a hora de expiração do response;
  • Last-Modified - indica a data e a hora que o servidor de origem acredita que foi realizada a última modificação;
  • extension-header - é composto por campos que não fazem parte do protocolo, mas que podem (ou não) ser compreendidos pelo requisitante.


Corpo da mensagem

Pode conter o corpo da entidade associada ao request ou ao response. O corpo da mensagem se diferencia do corpo da entidade apenas quando um encoding é aplicado à entidade.

As regras para uma mensagem conter um corpo são diferentes para o request e o response. Em um request, a inclusão de um corpo necessita da inclusão dos campos de cabeçalho Content-Length e Transfer-Encoding, caso contrário o servidor até atenderá a requisição, mas ignorará o corpo. Em um response, a presença do corpo vai depender do método do request e do código de estado da resposta (202 - Accepted, 302 - Found, 404 - Not Found, 502 - Bad Gateway
): request com o método HEAD obtém respostas sem o corpo, assim como todos com estados 1** (informacional), 204 (sem conteúdo) e 304 (não modificado). Todas as outras combinações de métodos de request e estado da resposta possuem um corpo, mesmo de tamanho zero.



Entidade

As mensagens de request e response podem conter uma entidade, de acordo com as regras de existência do corpo da mensagem mencionadas acima. Uma entidade é composta pelo cabeçalho específico (já descrito) e pelo corpo da entidade (em algumas situações só será trafegado o cabeçalho da entidade).

A entidade se encontra no corpo da mensagem e está em um formato e encoding determinado pelos campos relativos de seu cabeçalho.


Na próxima semana falaremos sobre a formação das mensagens de request e de response, o que nos dará base para falarmos sobre uma das formas de integração com a plataforma iVarejo: a integração via Http Post utilizando o Form (veja o nosso tutorial).



tags: #http, #protocolo, #request, #response, #introducao

Fontes:

http://www.ietf.org/
http://tools.ietf.org/html/rfc2616
Comments