Aplicação Web?! HTTP?!

Mais de 2 bilhões de pessoas acessam a web todos os dias com diversos objetivos. Muitos sites são publicados todos os dias, porém poucas destas pessoas tem o conhecimento de como realmente funciona por baixo dos panos um site de serviço HTTP (Hypertext Transfer Protocol) ou HTTPS(Hypertext Transfer Protocol Secure).

Se realmente eu fosse escrever aos mínimos detalhes, com toda certeza esta publicação viria a se tornar um livro, então vamos entender sem maiores aprofundamentos no conteúdo, porém com uma boa compreensão do assunto.

O que é a internet?

A internet, nada mais é do que um sistema global de redes computacionais interligadas que atribuiu nome ao tipos de transferências que seriam realizadas através dos serviços e protocolos de rede.

Figura 1 — Fluxo de requisição e resposta entre cliente e servidor

Não demorou até surgir o serviço responsável por tratar as requisições e respostas entre clientes (navegadores) e servidores na WWW (World Wide Web).
Como uma imagem vale mais que mil palavras, talvez fique ainda mais claro assim:

A figura 1 tem a rápida representação de como é o fluxo de requisição e resposta entre cliente e servidor.
Parece muito simples, não é?Entretanto, o servidor não consegue entender e executar automaticamente tudo sozinho, como por exemplo salvar dados em Bancos de Dados, e é aí que entram em cena as linguagens de programação (independentemente de ser uma aplicação web ou não). Talvez, para páginas que são geradas dinamicamente poderíamos entender melhor desta forma:

Figura 2 — Requisição e resposta entre cliente e um servidor de respostas dinâmicas

A figura 2 representa uma mesma requisição como a da figura 1, porém com o diferencial de que agora temos um hipotético servidor com respostas dinâmicas.

OK, agora que entendemos como funciona o caminho percorrido de uma simples requisição do usuário ao servidor de resposta, podemos avançar um pouquinho mais.

Headers

Popularmente conhecidos como cabeçalhos, os headers estão presente implicitamente em toda requisição para um site/aplicação web através de um browser. Esses cabeçalhos são metainformações necessárias para a compreensão da requisição entre o browser e servidor.
Vejamos um exemplo de uma simples requisição com seu cabeçalho (header) de resposta:

Cabeçalho de resposta da requisição GET na URL pudim.com.br

Podemos observar que não estão presentes muitos elementos, porém devemos ter a ciência de que cabeçalhos podem ser customizados.
De qualquer forma, estes são alguns exemplos de cabeçalhos:

(Requisição)
– Accept:
Tipo de conteúdo suportado e possivelmente esperado.
Accept-Language: Linguagens suportadas e cada uma delas com um nível diferenciado de preferência (no caso da figura 3, a preferencial é a pt-BR).
Cookies: Informações armazenadas pelos scripts do servidor.
Host: URL base do servidor.
User-Agent: Descrição e especificações do cliente (no caso o browser) utilizado.

(Resposta)
– Content-Type:
Tipo de conteúdo (resposta do Accept).
Server: Informações sobre o servidor.
Status: Estado da resposta.

Você consegue se lembrar de algum site que você tentou acessar e recebeu uma resposta 404 NOT FOUND ou algo do gênero? Pois é, esta resposta provavelmente se trata de uma resposta com o Status 404 devolvido como resposta de uma requisição através de um servidor.

Você pode achar outros status clicando aqui.

São inúmeros os cabeçalhos disponíveis de uma requisição ou resposta, e ainda podem ser customizados variando de aplicação para aplicação.

Métodos HTTP

Os métodos HTTP são enviados junto ao cabeçalho (header) de uma requisição para indicar a ação que deve ser realizada (ao menos esperada)pelo servidor. Algo que torna mais interessante é que estes métodos HTTP podem ser customizáveis, porém já temos alguns pré-definidos (pela maioria dos browser já são suportados), são eles:

GET: Solicita a visualização de um recurso. Ele também é conhecido por ser definido como método padrão pelos navegadores ou seja, quando você digita umaURL qualquer, você esta usando o método GET.

POST: Envia dados “ocultos” pelo body (corpo) da requisição junto de cabeçalhos extras como Content-Type e Content-Length para serem processados pelo servidor. Por exemplo: quando você preenche algum formulário na internet e o submete, geralmente você esta enviando um POST ao servidor. Pelo fato dos dados serem submetidos de forma “oculta” através do POST, este método tem maior segurança em relação aos dados submetidos pelo método GET onde estes ficam explícitos viaquery string no corpo da URL (http://exemplo.com/?campo1=valor1&campo2=valor2).

HEAD: Funciona de modo parecido ao GET com a diferença de que é esperado que o servidor responda apenas as metainformações do recurso por meio dos cabeçalhos sem ter que exibir o conteúdo por inteiro.

PUT: Este é um método que submete dados igual ao POST, porém mais utilizado para enviar dados apenas à recursos já existentes ou seja, uma atualização de dados parcial.

DELETE: Como o nome explicitamente já nos diz, este por sua vez tem o intuito de apagar um recurso.

OPTIONS: Quando este método é solicitado, o servidor tem de responder quais métodos HTTP estão disponíveis pela aplicação, uma vez que ela não é obrigada a aceitar e interpretar todos.

TRACE: Geralmente utilizado para depurar uma requisição de forma que é possível saber o que os recursos ou servidores intermediários estão modificando no caminho da mesma.

CONNECT: Utilizado para o uso em paralelo de um proxy para que seja possível a utilização da requisição dentro de uma conexão SSL.

Os métodos HTTP podem sim ser customizados, porém nem todos os browsers podem suportá-los desta forma. Vale também lembrar que não é porque existem vários métodos HTTP, que eles devem, obrigatoriamente, ser implementados e respondidos adequadamente pelo servidor da aplicação.

Chegamos ao fim de mais uma publicação… agradeço a sua leitura e em breve, espero ver novamente você por aqui.

Comentários Recentes
  • Douglas disse:

    Ótimo post. Parabéns, continue assim.

  • Leandro disse:

    até entao, eu pensava que só existia via parametro na propia url

  • Deixe seu comentário

    Deixe uma resposta

    O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *