Introdução à Web e a HTTP

Dalton Serey

Claro que a web (ou World Wide Web) dispensa apresentações genéricas. Todos usamos a web e sabemos do que se trata. Contudo, se você quer aprender a construir aplicações na web, precisará de uma definição e de um entendimento mais precisos do que o conceito popular. Vejamos abaixo os conceitos centrais e uma breve introdução a HTTP, o protocolo por detrás da web.

A Web

A web é um sistema de informações aberto (de acesso público e livremente interconectado) que opera sobre a Internet em escala mundial, construído sobre o protocolo HTTP. Tipicamente, para acessar a web, o usuário precisa apenas de um computador conectado à Internet, equipado com um navegador (ou browser) e de um endereço web válido. O browser é responsável por interagir com servidores web e proporcionar ao usuário meios para interagir e navegar pelos dados e serviços providos. A figura abaixo ilustra o modelo conceitual da web.

FIGURA 1

O browser O browser é a interface da web para o usuário. É um aplicativo que executa localmente na máquina do usuário e que é responsável por buscar e exibir os recursos web solicitados pelo usuário. “Exibir”, contudo, é uma grande simplificação. Na web moderna, os recursos são, em grande proporção, entidades interativas e não meros textos ou imagens. Assim, exibir recursos web significa proporcionar uma experiência interativa completa para o usuário, indo desde a exibição de textos, imagens, e vídeos à execução de scripts e de aplicativos completos.

Por isso, parte significativa de aprender a desenvolver aplicações web consiste em entender como funciona o browser e como as aplicações podem explorar suas funcionalidades. O browser é para as aplicações web, o mesmo que o sistema operacional é para as aplicações desktop (ou nativas).

Servidores e recursos No extremidade oposta à do usuário e do browser estão os servidores web. Servidores são responsáveis por armazenar e prover os recursos e serviços disponíveis na web. Todo recurso da web é armazenado por algum servidor e tem um endereço web único que pode ser usado pelo usuário para acessar o recurso. Originalmente, recursos web limitavam-se a simples documentos e arquivos. Por esse motivo, servidores eram meros provedores de acesso a esses arquivos. Na web moderna, contudo, recursos são usados para representar conceitos mais abstratos e não apenas arquivos. Pense, por exemplo, nos posts de redes sociais, em emails, em contas bancárias e tantos outros recursos web que são bem mais que simples arquivos ou documentos. Além disso, os recursos web modernos são tipicamente compostos, ou seja, agregados de vários outros recursos, como textos, imagens, vídeos. Há ainda recursos que são representações de entidades físicas, tais como sensores e atuadores de dispositivos de medição ou equipamentos. Por isto, servidores web modernos são aplicações complexas capazes de produzir e manipular as abstrações desejadas.

O Protocolo HTTP

O protocolo de comunicação da web é o HTTP (Hypertext Transfer Protocol)). Você pode pensar no protocolo HTTP como a “língua” que os processos que formam a web precisam “falar” para se comunicarem uns com os outros. É a existência desse protocolo, com especificação aberta que permite que qualquer desenvolvedor crie novos softwares que podem se incorporar de forma imediata e autônoma à web.

HTTP é um protocolo de nível de aplicação. Isto quer dizer que é um protocolo que estabelece a comunicação entre processos sobre a Internet. As implementações atualmente em uso (HTTP/1.1 e HTTP/2) usam TCP como protocolo de transporte e são, portanto, construídas sobre sockets e conexões TCP (a versão HTTP/3, ainda está em desenvolvimento, deve usar sockets UDP).

À primeira vista, pode parecer que HTTP é somente o protocolo usado na comunicação entre o browser e os servidores e que as aplicações devem estar isoladas do protocolo e de todos os pormenores da comunicação. Na prática, contudo, diversas características do protocolo e da própria natureza da comunicação sobre a Internet terminam transparecendo e afetando a aplicação. A prática, ao longo dos anos, terminou demonstrando que a melhor abordagem é que o desenvolvedor aceite e incorpore conscientemente as características do protocolo e da comunicação da rede às condições de operação às quais a aplicação estará submetido. Mais que isso, o desenvolvimento moderno para web é calcado na ideia de que as aplicações devem explorar deliberadamente o protocolo HTTP e o modelo arquitetural em que se baseia – conhecido como REST. Hoje, uma boa compreensão de HTTP e REST é considerada conhecimento fundamental para qualquer desenvolvedor web, seja ele focado em frontend, backend ou ambos.

Características de HTTP Vários adjetivos e palavras-chave são frequentemente usados para indicar ou ressaltar certas características ou propriedades do protocolo HTTP. Vejamos as principais dessas características.

HTTP é um protocolo de nível de aplicação
Indica que o protocolo HTTP estabelece regras de interação entre processos (que executam acima do sistema operacional, portanto). Em geral, a ideia é reforçar que não é um protocolo dos níveis básicos da rede que são, tipicamente, implementados pelo sistema operacional ou pelo hardware da máquina.
HTTP usa o modelo cliente-servidor
Indica que todas as comunicações devem ser iniciadas por um cliente. Ao servidor cabe apenas aguardar por requisições e atendê-las, quando solicitado. Também dizemos que o servidor é meramente reativo.
Interações HTTP são baseadas no ciclo requisição-resposta
Indica que todas as interações se restringem à troca de duas mensagens: uma enviada do cliente ao servidor, chamada requisição (ou reques) e outra do servidor ao cliente, chamadda resposta (ou response). Quando o cliente receber a resposta, a interação estará considerada concluída. Isso não impede, contudo, que novos ciclos entre o mesmo cliente e servidor ocorram em seguida.
HTTP é connectionless
Indica que a comunicação HTTP não requer que uma conexão seja mantida entre cliente e servidor depois do fim de cada ciclo requisição-resposta. Na prática, contudo, é comum que a conexão TCP seja mantida por algum tempo, para reduzir o custo de estabelecer uma nova conexão TCP, caso o mesmo cliente venha a fazer uma nova requisição. Mas, observe, essa é a conexão em nível TCP (tipicamente, mantida pelo sistema operacional, não pelo processo que implementa HTTP).
HTTP é stateless

Esta é, talvez, a mais importante das características de HTTP. Ela expressa que cada ciclo requisição-resposta é totalmente independente dos demais e que o servidor não deve manter estado entre as requisições relativas à interação. Esta é uma das características do estilo arquitetural REST e tem consequências muito importantes para a web. É também uma das características que desejamos nas aplicações web que queremos construir.

Algumas das consequências de ser stateless são: 1) o servidor precisa responder cada requisição com base apenas nos dados recebidos na requisição; 2) o cliente deve incluir todos os dados de autenticação e autorização do usuário em cada requisição; 3) o conceito de sessão ou conversação pode ser usado em aplicações web, mas deve ser implementado exclusivamente do lado cliente; 4) o design e a lógica do servidor são simplificados, porque dispensa o armazenamento de dados de sessão e, mais importante, dispensa a implementação de lógicas ressincronização; em sistemas statefull, quando ocorrem desconexões ou quando o cliente “morre”, é necessário ter uma lógica para decidir o que fazer com os dados da sessão interrompida; 5) servidores stateless escalam muito melhor, porque podem ser facilmente implementados como múltiplos servidores em paralelo (escalabilidade horizontal); isso ocorrer porque é indiferente qual servidor irá atender a sucessivas requisições de um mesmo cliente; 6) o sistema tende a ser mais tolerante a desconexões temporárias e reconexões; 7) permite melhorar o desempenho do sistema e reduzir a carga no servidor, explorando estratégias de caching (ver abaixo).

HTTP é um protocolo textual
As mensagens do protocolo HTTP são escritas em texto simples. Isso significa que as mensagens (tanto requisições como respostas) podem ser facilmente lidas e/ou editadas, sempre que necessário. Este é o caso em atividades de debugging, seja de aplicações, seja de implementações de browsers, servidores ou outros elementos intermediários que usam o protocolo (proxies).

De fato, HTTP não é o único protocolo textual. Vários protocolos de aplicação do mundo Unix são textuais: FTP, SMTP, IMAP, etc. O uso de protocolos textuais é, em boa dose, parte da filosofia Unix de programação.


Vejamos agora mais detalhes sobre mensagens HTTP.