Breve explicação sobre o protocolo HTTP
|
|
Quando nos referimos a protocolo em tecnologia da informação, estamos nos referindo a padrões e regulamentos pré-definidos para que, neste caso, uma comunicação seja estabelecida. Protocolo, portanto, nada mais é do que a forma como as aplicações, redes, computadores, etc, se comunicam. Em uma representação, isso seria uma linguagem. Um individuo que só compreenda português só irá entender a mensagem de outra pessoa que também entenda e fale português. Caso contrário, a comunicação não irá funcionar.
O HTTP (Hipertext Transfer Prototocol) é um protocolo cliente-servidor para transferência de arquivos pela Internet. Quando o usuário digita o endereço de um site (URL), o navegador realiza a requisição e o servidor responde com os arquivos necessários para exibição da página solicitada. Nesse processo, o HTTP é utilizado.
A URL (Uniform Resource Locator) é o endereço para um recurso na internet. Para que uma URL seja formada, ela é composta por alguns parâmetros, conforme imagem:
|
|
Fonte:Mozilla
Vamos pensar no cabeçalho HTTP como um formulário que possui inúmeros campos que podem ser preenchidos, de acordo com a necessidade de cada requisição ou resposta, do browser ou aplicação respectivamente. Uma lista completa dessas opções pode ser encontrada neste link.
Vou tentar apresentar algumas dessas opções mostrando o HTTP Request e HTTP Response. Para isso utilizei de alguns “laboratórios” disponibilizados pela da Portswigger e o Burp Suite, ferramenta também desenvolvida por eles.
|
|
Existe várias formas de realizar uma requisição para o servidor. No HTTP essas formas são chamadas de HTTP Verbs, ações ou métodos. A documentação completa pode ser encontrada neste link. Vou apresentar os principais, sendo eles o Get e o Post.
Essa ação realiza uma solicitação de um recurso localizado no servidor onde o retorno desse pedido são os dados. Essa solicitação pode ser uma página, um arquivo, uma imagem, etc. Por exemplo, ao solicitar a página https://ac451fa81f07575bc03927fd00f3007f.web-security-academy.net/login a seguinte requisição é enviada para o servidor. Note que os principais parametros enviados são:
|
|
O Get também pode enviar dados para o servidor, como por exemplo o envio de informações através de um formulário. Entretanto, por questões de segurança, esse uso não é recomendado, uma vez que, os parâmetros são enviados na própria URL. Utilizei um formulário de login como exemplo. No campo de usuário e senha, digitei ‘admin’ e ‘admin’.
|
|
Ao enviar as credenciais via Get, as mesmas são enviadas diretamente na URL expondo completamente o usuário e senha informado. Por isso, a ação indicada neste caso é o Post.
|
|
Como mencionado anteriormente, a ação POST envia dados para o servidor, porém, a principal diferença com o método Get é que o Post envia toda informação na requisição HTTP, fazendo com que a URL não seja modificada.
|
|
|
|
Quando falamos com alguém, sempre esperamos uma resposta como retorno, nem que seja um “Oi, não entendi”. No HTTP funciona da mesma forma. Quando uma requisição é realizada, sempre haverá uma resposta como retorno. Pode ser o contéudo da página em si ou uma devolução sobre o porque o recurso não foi disponibilizado. Essa devolução é conhecida como status code.
São padrões para a resposta dos servidores ao informar sobre o recurso requisitado. Existem inúmeras respostas e cada uma delas possui um código. Abaixo os status mais conhecidos:
Se analisarmos resposta da requisição Get feita anteriormente veremos que foi retornado um status code
|
|
Se na mesma URL eu solicitar um recurso que não existe será retornado outro status code
|
|
Uma lista com todos os status code pode ser encontrada neste link HTTP Status code
O protocolo HTTP é extenso e possui diversas funcionalidades e opções que podem ser exploradas, estudadas e utilizadas. Aqui tentei exemplificar um pouco como funciona os principais elementos. :)
Para uma análise mais profunda do assunto, recomendo a documentação que pode ser encontrada no site da Mozilla