« Voltar
em http web

O que é e pra que serve o protocolo HTTP? Quando eu uso ele?.

No post passado falei um pouco sobre os métodos HTTP e pra que serve cada um.
Mas aí vem a pergunta: quando eu uso o protocolo HTTP? Pra que serve isso?
Pra responder essas perguntas, precisamos primeiro responder outras.

O que é a internet?

Um emaranhado de sites, serviços, imagens, videos e mais um monte de coisa, certo?
Agora, a internet funciona basicamente da seguinte forma: você desenvolve um site, hospeda o que é necessário em um servidor e as pessoas se conectam a uma rede e conseguem acessar o que você fez através desse servidor.
Como é feita essa comunicação, cada servidor faz do seu jeito? Cada aplicação/site/serviço tem a sua forma de ser acessado?

A necessidade de um padrão

Não dá pra cada site e serviço no mundo prover o seu conteúdo de uma forma diferente. Há a necessidade de uma padronização. Há a necessidade de um protocolo.

A definição de protocolo, de acordo com a Wikipedia:
"Na ciência da computação, um protocolo é uma convenção que controla e possibilita uma conexão, comunicação, transferência de dados entre dois sistemas computacionais. De maneira simples, um protocolo pode ser definido como "as regras que governam" a sintaxe, semântica e sincronização da comunicação. Os protocolos podem ser implementados pelo hardware, software ou por uma combinação dos dois."

Então, resumidamente, o HTTP nada mais é do que um conjunto de regras pré-definidas pra você escrever um texto e poder se comunicar com outro dispositivo na internet.

Quando eu uso o protocolo HTTP?

Essa página que você está lendo foi carregada através do protocolo HTTP. O que aconteceu quando você clicou em um link ou digitou o endereço do meu site no seu navegador foi mais ou menos o seguinte:
O navegador pegou o endereço desse post, que é http://gabsferreira.com/pra-que-serve-o-protocolo-http-quando-eu-uso-ele. Em seguida, ele montou uma requisição HTTP da seguinte forma(esse texto mesmo):
GET /os-metodos-http-e-a-diferenca-entre-eles/ HTTP/1.1 Host: gabsferreira.com

Aí ele pegou esse texto e enviou pro servidor onde meu site está hospedado. O servidor do meu site interpretou essa requisição, viu o que era necessário, e devolveu uma resposta para o navegador num formato que ele entende: html.

Se a gente olhar de forma fria, a internet então é um monte de texto que vai de um lado pro outro de acordo com a necessidade. Esse texto é interpretado de uma forma diferente dependendo do ambiente em que ele é carregado. Mas no fim das contas, é tudo texto.

Um exemplo mais prático

Na maioria das vezes nós não fazemos as requisições HTTP manualmente, geralmente são as ferramentas que utilizamos para navegar na internet que fazem esse trabalho.
Porém, quando estamos desenvolvendo software precisamos pensar nisso. Vamos supor que temos um formulário simples de login:

(sim, eu sei que tá torto)

O html desse formulário é o seguinte:

<form action="/Login/Autentica">  
    <label>Login:
        <input name="login" />
    </label>
    <br/>
    <label>
        Senha:
        <input name="senha" type="password" />
    </label>
    <br/>
    <input type="submit" value="Login" />
</form>  

Se eu digitar meu usuário e senha no formulário e clicar no Login, minha aplicação vai montar uma requisição HTTP e enviar. A URL depois que eu clicar no login vai ficar assim:
http://localhost:51819/Login/Autentica?login=meulogin&senha=senha Tá vendo que as informações de login e senha estão na url? Isso porque por padrão, se eu não especificar qual o método HTTP eu estou usando por padrão é usado o GET. Quando usamos o método GET, os dados da requisição vão na URL.
Mas eu não quero fazer isso, certo? Quero mandar isso escondido de alguma forma!
Pra isso, usamos o método POST.

Pra usar o POST, basta adicionar o atributo method na tag form:

<form action="/Login/Autentica" method="POST">  
//restante do código
</form>  

Dessa forma, quando clicar no botão login, a url vai ficar assim:
http://localhost:51819/Login/Autentica

Mas onde estão as informações do login e senha?
Elas estão escondidas, no corpo da requisição. Não temos acesso ao corpo quando estamos usando um navegador.
Mas, pode ser que eu queira às vezes ver o que está no corpo, analisar os cabeçalhos da minha requisição e ver detalhes dela e da resposta também. Nesse caso você pode usar uma ferramenta chamada Fiddler.

GET X POST

GET e POST são os dois métodos mais utilizados quando estamos trabalhando em cima do protocolo HTTP. Mas quando usar um e outro?

As características do GET:
-A URL pode ser favoritada e compartilhada;
-Podem ser cacheadas pelo navegador;
-É idempotente: você pode repetir uma requisição GET quantas vezes quiser e não irá alterar nada.

Características do POST:
-Não expõe as informações na URL como o GET;
-Não é idempotente: se fizermos um POST duas vezes podemos criar duplicar um registro. O que não queremos né?

Então, resumidamente: usamos GET quando queremos buscar um informação, quando queremos a representação de algum recurso e queremos ser capazes de compartilhar essa informação. Esse recurso pode ser: uma página, um arquivo xml ou json, uma imagem, etc. Usamos POST quando estamos lidando com informações críticas que não queremos mostrar ao usuário e/ou quando queremos criar algum recurso em nossa aplicação.

Conheça o HTTP por inteiro neste outro artigo que também escrevi!

Já que você leu até aqui, curte minha página lá no Facebook pra ficar em dia com as minhas postagens e outras novidades legais! O endereço é https://www.facebook.com/devgabsferreira

Ficou alguma dúvida? Alguma sugestão? Quer saber mais sobre algo específico?
Comenta aí! (:

comments powered by Disqus