HTTP - Mensagens

O HTTP é baseado no modelo de arquitetura cliente-servidor e um protocolo de solicitação / resposta sem estado que opera trocando mensagens por meio de uma conexão TCP / IP confiável.

Um "cliente" HTTP é um programa (navegador da Web ou qualquer outro cliente) que estabelece uma conexão com um servidor com o objetivo de enviar uma ou mais mensagens de solicitação HTTP. Um "servidor" HTTP é um programa (geralmente um servidor web como o Apache Web Server ou Internet Information Services IIS, etc.) que aceita conexões para atender a solicitações HTTP enviando mensagens de resposta HTTP.

O HTTP usa o Uniform Resource Identifier (URI) para identificar um determinado recurso e estabelecer uma conexão. Assim que a conexão for estabelecida,HTTP messagessão passados ​​em um formato semelhante ao usado pelo correio da Internet [RFC5322] e as Extensões de correio da Internet multiuso (MIME) [RFC2045]. Essas mensagens incluemrequests do cliente para o servidor e responses do servidor para o cliente, que terá o seguinte formato:

HTTP-message   = <Request> | <Response> ; HTTP/1.1 messages

Solicitações e respostas HTTP usam um formato de mensagem genérico de RFC 822 para transferir os dados necessários. Este formato de mensagem genérico consiste nos quatro itens a seguir.

  • A Start-line
  • Zero or more header fields followed by CRLF
  • An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
  • Optionally a message-body

Nas seções a seguir, explicaremos cada uma das entidades usadas em uma mensagem HTTP.

Message Start-Line

Uma linha de início terá a seguinte sintaxe genérica:

start-line = Request-Line | Status-Line

Discutiremos a linha de solicitação e a linha de status enquanto discutimos as mensagens de solicitação e resposta HTTP, respectivamente. Por enquanto, vamos ver os exemplos de linha de partida em caso de solicitação e resposta:

GET /hello.htm HTTP/1.1     (This is Request-Line sent by the client)

HTTP/1.1 200 OK             (This is Status-Line sent by the server)

Campos de cabeçalho

Os campos de cabeçalho HTTP fornecem informações necessárias sobre a solicitação ou resposta, ou sobre o objeto enviado no corpo da mensagem. Existem quatro tipos de cabeçalhos de mensagens HTTP:

  • General-header: Esses campos de cabeçalho têm aplicabilidade geral para mensagens de solicitação e resposta.

  • Request-header: Esses campos de cabeçalho têm aplicabilidade apenas para mensagens de solicitação.

  • Response-header: Esses campos de cabeçalho têm aplicabilidade apenas para mensagens de resposta.

  • Entity-header: Esses campos de cabeçalho definem metainformações sobre o corpo da entidade ou, se nenhum corpo estiver presente, sobre o recurso identificado pela solicitação.

Todos os cabeçalhos mencionados acima seguem o mesmo formato genérico e cada um dos campos do cabeçalho consiste em um nome seguido por dois pontos (:) e o valor do campo da seguinte forma:

message-header = field-name ":" [ field-value ]

A seguir estão os exemplos de vários campos de cabeçalho:

User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

Corpo da mensagem

A parte do corpo da mensagem é opcional para uma mensagem HTTP, mas se estiver disponível, será usada para transportar o corpo da entidade associado à solicitação ou resposta. Se o corpo da entidade estiver associado, geralmenteContent-Type e Content-Length as linhas dos cabeçalhos especificam a natureza do corpo associado.

O corpo da mensagem é aquele que carrega os dados reais da solicitação HTTP (incluindo dados do formulário e upload, etc.) e dados de resposta HTTP do servidor (incluindo arquivos, imagens, etc.). Abaixo, é mostrado o conteúdo simples do corpo de uma mensagem:

<html>
   <body>
   
      <h1>Hello, World!</h1>
   
   </body>
</html>

Os próximos dois capítulos farão uso dos conceitos explicados acima para preparar Solicitações HTTP e Respostas HTTP.