Teste de segurança - mensagens HTTP

Mensagens HTTP

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. Uma vez que a conexão é estabelecida, as mensagens HTTP são passadas em um formato semelhante ao usado pelo correio da Internet [RFC5322] e pelas Extensões Multifunção para Correio da Internet (MIME) [RFC2045]. Essas mensagens consistem em solicitações de cliente para servidor e respostas de servidor para cliente que terão o seguinte formato -

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

A solicitação e a resposta 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 seguintes quatro itens -

  • Uma linha de partida

  • Zero ou mais campos de cabeçalho seguidos por CRLF

  • Uma linha vazia (ou seja, uma linha sem nada antes do CRLF) indicando o final dos campos do cabeçalho

  • Opcionalmente, um corpo de mensagem

A seção a seguir explicará cada uma das entidades usadas na mensagem HTTP.

Message Start-Line

Uma linha de partida 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 a seguir -

  • 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 são aplicáveis ​​apenas para mensagens de solicitação.

  • Response-header - Esses campos de cabeçalho são aplicáveis ​​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.

Todos os cabeçalhos mencionados acima seguem o mesmo formato genérico e cada um dos campos de 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.

Um corpo de mensagem é aquele que transporta dados reais de solicitação HTTP (incluindo dados de formulário e upload, etc.) e dados de resposta HTTP do servidor (incluindo arquivos, imagens etc.). A seguir está um conteúdo simples de um corpo de mensagem -

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