O mínimo que você deveria saber sobre Servidores Web HTTP

HTTP Web Servers Dog

Se você já trabalhou com desenvolvimento de sistemas web como backend, front end ou fullstack, provavelmente teve que utilizar algum servidor web. Seja com NodeJS, PHP, Ruby, Python ou Java. Não importa a tecnologia, se você espera mostrar algo em um navegador, var precisar de um servidor web.

Em meio a tantos frameworks, containers e linguagens. A forma como tudo funciona pode parece um pouco obscura. Algo que um mero mortal não conseguiria ter uma real compreensão.

Mas não se preocupe, pois eu tenho uma ótima notícia para você…

Servidores web, são bem mais simples do que parecem! O quê, não acredita? Então continua lendo que até o final desse post você será capaz de construir seu próprio servidor web…

Mas antes, tem algumas coisas que você precisa saber…

O que são sockets de rede?

Por definição, um socket é o ponto final do fluxo de comunicação entre dois processos na rede.

Ou seja, se você deseja se comunicar através da rede de um computador para outro, é um socket que você precisa fazer.

Tá, mas como faço um socket?

Cada sistema operacional já possui sua própria API para criacão de sockets (Talvez isso explique por que servidores funcionam melhor no linux), então você não precisa se preocupar com isso. Deve apenas utilizar a biblioteca de sockets da sua linguagem de programação.

O Que é protocolo HTTP?

O HTTP ao pé da letra significa “Protocolo de transferência de Hipertexto”.

Mas afinal, o que isso quer dizer? Bom.. Hipertexto não é nada mais, nada menos que um texto que contenha links e o que podemos entender sobre protocolo neste caso, é que ele é um conjunto de regras para a comunicação entre o servidor e o navegador web.

O HTTP é a “lingua” que o navegador e o servidor usam para se comunicar.

Para entender melhor isso, veja esse exemplo do que o seu servidor precisa pra imprimir um “Coehh rapaziada!!” na tela de um navegador.

Coehh rapaziada!! Hypertext example

Da primeira até a quarta linha do arquivo temos os chamados “cabeçalhos” do Http.

Vamos ver em detalhes o que cada uma dessas linhas faz

  • 1 em HTTP/1.1 é informada a versão do protocolo http utilizado nesta requisição e 200 OK informa o status da resposta.
  • 2 Content-Type faz exatamente o que diz, informa o MIME type do conteúdo que está sendo enviado pelo servidor
  • 3 Content-Length é o tamanho do conteúdo em bytes
  • 4 Connection: close informa ao navegador que a conexão será fechada após a conclusão da resposta. (Na prática isso faz com que aquele loader do seu navegador pare de rodar)

Finalmente na linha 6 é colocado o conteúdo que você deseja exibir no navegador.

O mais interesssante é você descobrir que não importa o que você mande pelo HTML e se é via POST ou GET, o HTTP vai sempre ser um conteúdo em texto. Abaixo o exemplo de um POST enviado com a variável message com o conteúdo “hi”

Chega de enrolação e vamos fazer um servidor web!

Agora que você já entende como funciona o HTTP e sabe o que são sockets, já tem conhecimento o suficiente para desenvolver seu primeiro servidor, e o básico tem bem menos código do que você imagina.

Abaixo um exemplo em ruby de um servidor web que responde “Coeh Rapaziada!” quando você acessa http://localhost:2345

Tudo que você precisa fazer é executar este arquivo com o ruby desta forma:

ruby webserver.rb

Na prática o que foi feito neste código foi criar um socket, abrir um loop infinito para aguardar uma conexão do navegador, imprimir o conteúdo da request e responder em HTTP pelo socket.

Você pode ver mais detalhes nesta versão comentada do código do servidor web:

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.