Arquitetura da Web
A arquitetura da Web é um sistema complexo e em constante evolução, que sustenta a maior rede de comunicação já criada pela humanidade. Desde sua concepção inicial por Tim Berners-Lee no CERN, a Web evoluiu para incorporar uma variedade de tecnologias, protocolos e padrões que permitem a interconexão global de informações, serviços e pessoas. Este capítulo explora os fundamentos da arquitetura da Web, seus marcos históricos e as competências essenciais para desenvolvedores backend.
Fundamentos da Arquitetura da Web
Seção intitulada “Fundamentos da Arquitetura da Web”A arquitetura da Web é baseada em princípios de simplicidade, universalidade e escalabilidade. Ela é construída sobre um conjunto de tecnologias fundamentais, incluindo:
- URI (Uniform Resource Identifier): Um sistema de identificação que permite localizar e acessar recursos na Web.
- HTTP (HyperText Transfer Protocol): O protocolo de comunicação que define como os clientes
- DNS (Domain Name System): Um sistema de resolução de nomes que traduz domínios legíveis por humanos em endereços IP.
- TLS (Transport Layer Security): Um protocolo de segurança que protege a comunicação entre clientes e servidores.
A URI é um identificador único para recursos na Web, permitindo que sejam localizados e acessados. Ela é composta por diferentes partes, como o esquema (http, https), o domínio, o caminho e os parâmetros de consulta. Por exemplo:
https://exemplo.com/artigos/123?ref=homepage- Esquema:
https - Domínio:
exemplo.com - Caminho:
/artigos/123 - Parâmetros de consulta:
ref=homepage
O HTTP é o protocolo que define a comunicação entre clientes (navegadores) e servidores. Ele é baseado em um modelo de requisição-resposta, onde o cliente envia uma requisição para o servidor, que processa a solicitação e retorna uma resposta. As requisições HTTP incluem métodos como GET, POST, PUT e DELETE, enquanto as respostas incluem códigos de status como 200 (OK), 404 (Not Found) e 500 (Internal Server Error). Por exemplo:
GET /index.html HTTP/1.1Host: exemplo.comO DNS é um sistema de resolução de nomes que traduz domínios legíveis por humanos em endereços IP, permitindo que os clientes localizem os servidores na rede. Por exemplo, quando um cliente tenta acessar exemplo.com, o DNS resolve esse domínio para um endereço IP
exemplo.com -> 2.2.2.2Modelo Cliente-Servidor
Seção intitulada “Modelo Cliente-Servidor”A arquitetura da Web é baseada no modelo cliente-servidor, onde os clientes (navegadores) fazem solicitações a servidores para acessar recursos identificados por URIs. Os servidores processam essas solicitações e respondem com os recursos solicitados, utilizando o protocolo HTTP para comunicação.
O processo de comunicação envolve várias etapas, incluindo a resolução de nomes de domínio (DNS), estabelecimento de conexões TCP/IP, envio de solicitações HTTP e recebimento de respostas. Essa arquitetura permite a escalabilidade, flexibilidade e interoperabilidade que caracterizam a Web.
Uma requisição e resposta entre cliente e servidor geralmente envolve:
-
O cliente recebe um URI
GET https://exemplo.com/index.html HTTP/1.1 -
O domínio é resolvido para um endereço IP usando o DNS, que faz uma tradução de
exemplo.compara um endereço IPexemplo.com -> 2.2.2.2 -
O cliente solicita uma conexão (SYN) com o servidor no endereço IP e porta padrão (80 para HTTP)
SYN 2.2.2.2:80 -
O servidor responde com um
SYN-ACKpara confirmar que está disponível para comunicação -
O cliente confirma a conexão com um
ACKe a comunicação é estabelecida -
Se houver suporte a TLS, o cliente e o servidor utilizam a conexão criada para um handshake para estabelecer uma conexão segura (HTTPS)
- O cliente envia número aleatório, lista de algoritmos de criptografia suportados e outras informações para o servidor
- O servidor responde com seu próprio número aleatório, o certificado digital e o algoritmo de criptografia escolhido
- O cliente verifica o certificado do servidor e, se for válido, gera uma chave de sessão, criptografa com a chave pública do servidor e envia de volta
- O servidor usa sua chave privada para descriptografar a chave de sessão e ambos usam a chave de sessão para criptografar a comunicação subsequente
-
Em uma conexão segura, o cliente pode enviar a requisição HTTP criptografada para o servidor
GET /index.html HTTP/1.1Host: exemplo.com -
O servidor processa a requisição, recupera o recurso solicitado (index.html) e responde com um status HTTP e o conteúdo do recurso
HTTP/1.1 200 OKContent-Type: text/html<html><head><title>Exemplo</title></head><body><h1>Olá, Mundo!</h1></body></html> -
O cliente recebe a resposta, processa o conteúdo. Se não houver mais requisições, o cliente pode enviar um comando para fechar a conexão (FIN)
-
O servidor responde com um
ACKpara confirmar o fechamento da conexão e ambos os lados encerram a comunicação.
Esses passos se repetem para todas as requisições que o cliente faz ao servidor, permitindo a navegação entre páginas, acesso a recursos e interação com serviços na Web.
Em casos onde o cliente precisa enviar várias requisições ou garantir uma conexão persistente com o servidor, o HTTP/1.1 introduziu o conceito de conexões persistentes, permitindo que múltiplas requisições sejam enviadas através da mesma conexão TCP, reduzindo a latência e melhorando a eficiência da comunicação. O cliente pode solicitar isso usando o cabeçalho Connection: keep-alive em suas requisições, e o servidor pode responder com o mesmo cabeçalho para indicar que a conexão será mantida aberta para futuras requisições.
GET /index.html HTTP/1.1Host: exemplo.comConnection: keep-aliveConexão TLS
Seção intitulada “Conexão TLS”A segurança é um aspecto fundamental da arquitetura da Web, e o TLS (Transport Layer Security) é o protocolo mais utilizado para garantir a confidencialidade, integridade e autenticidade das comunicações. O TLS funciona estabelecendo uma conexão segura entre o cliente e o servidor, utilizando criptografia para proteger os dados transmitidos.
É esse protocolo que permite a existência do HTTPS, onde o “S” significa “Secure”. O TLS é amplamente adotado para proteger transações financeiras, comunicações pessoais e qualquer troca de informações sensíveis na Web.
A conexão TLS envolve um processo de handshake, onde o cliente e o servidor negociam os parâmetros de segurança, trocam certificados digitais para autenticação e estabelecem uma chave de sessão para criptografar a comunicação subsequente. O processo pode ser resumido em quatro etapas principais:
Servidores Web
Seção intitulada “Servidores Web”Um servidor web é um software que processa requisições HTTP e entrega recursos (como páginas HTML, imagens, scripts, dados) para os clientes. Existem diversos servidores web populares, como Apache e Nginx, cada um com suas características e casos de uso específicos.
Um servidor web típico é composto por:
- Módulo de Processamento de Requisições: Responsável por receber e processar as requisições HTTP dos clientes.
- Módulo de Gerenciamento de Recursos: Responsável por localizar e entregar os recursos solicitados, como arquivos estáticos ou respostas dinâmicas geradas por aplicações backend.
- Módulo de Segurança: Implementa medidas de segurança, como autenticação, autorização e proteção contra ataques.
- Módulo de Log: Registra as atividades do servidor, como requisições recebidas, erros e outras informações relevantes para monitoramento e análise.
Esses servidores realizam as conexões com clientes e garantem que as requisições sejam processadas de forma eficiente e segura, permitindo a entrega rápida de conteúdo e a interação com aplicações web.
Servidor de Aplicação
Seção intitulada “Servidor de Aplicação”Um servidor de aplicação é um software que fornece um ambiente para executar aplicações web dinâmicas, processando a lógica de negócios e gerando respostas personalizadas para os clientes. Ele atua como uma camada intermediária entre o servidor web e a aplicação, permitindo a execução de código do lado do servidor para gerar conteúdo dinâmico.
Aplicações como Spring Boot, Django, Express.js e Flask são exemplos de frameworks que podem ser executados em servidores de aplicação para criar APIs REST, processar dados e interagir com bancos de dados.
No caso do Spring, o servidor de aplicação é o Tomcat, que é embutido no framework. Ele é responsável por receber as requisições HTTP, processar a lógica de negócios definida na aplicação Spring e gerar as respostas correspondentes para os clientes. Para o Express.js, o servidor de aplicação é o próprio Node.js, que executa o código JavaScript do lado do servidor para processar as requisições e gerar respostas dinâmicas.