Desenvolvimento Web Moderno:
HTTP, TCP/IP, WebSockets, SPA, HTMX, IPv4/IPv6 e Infraestrutura de Rede com Exemplos Práticos
O desenvolvimento web envolve não apenas frameworks modernos, mas também uma infraestrutura robusta que garante a comunicação eficiente entre servidores e clientes. Aqui, veremos conceitos como HTTP, TCP/IP, DNS, DHCP, IPv4/IPv6, CDNs e exemplos práticos para aplicar esses conceitos.
1. Códigos de Status HTTP com Exemplo Prático
Os códigos HTTP indicam o status das requisições entre cliente e servidor.
Exemplo: Criando uma API REST com Node.js e Express
Este código cria um servidor que responde com diferentes códigos HTTP.
const express = require('express');
const app = express();
const port = 3000;
// Rota com status 200 (OK)
app.get('/', (req, res) => {
res.status(200).send('Requisição bem-sucedida!');
});
// Rota com status 404 (Not Found)
app.get('/erro', (req, res) => {
res.status(404).send('Recurso não encontrado!');
});
// Rota com status 500 (Erro Interno)
app.get('/falha', (req, res) => {
res.status(500).send('Erro no servidor!');
});
app.listen(port, () => {
console.log(`Servidor rodando em http://localhost:${port}`);
});Testando
- Acesse
http://localhost:3000/→ Retorna200 OK. - Acesse
http://localhost:3000/erro→ Retorna404 Not Found. - Acesse
http://localhost:3000/falha→ Retorna500 Internal Server Error.
2. Comunicação TCP/IP com Exemplo Prático
Exemplo: Criando um Servidor TCP em Node.js
O TCP garante a entrega ordenada dos pacotes de dados. Aqui está um exemplo de servidor e cliente TCP.
Servidor TCP (Node.js)
const net = require('net');
const server = net.createServer((socket) => {
console.log('Cliente conectado.');
socket.on('data', (data) => {
console.log(`Mensagem recebida: ${data}`);
socket.write('Resposta do servidor: ' + data);
});
socket.on('end', () => console.log('Cliente desconectado.'));
});
server.listen(4000, () => console.log('Servidor TCP rodando na porta 4000'));Cliente TCP (Node.js)
const net = require('net');
const client = net.createConnection({ port: 4000 }, () => {
console.log('Conectado ao servidor');
client.write('Olá, servidor!');
});
client.on('data', (data) => {
console.log(`Resposta do servidor: ${data}`);
client.end();
});
client.on('end', () => console.log('Desconectado do servidor'));Testando
- Execute o servidor TCP:
node servidor.js. - Execute o cliente TCP:
node cliente.js. - Saída esperada:
- No servidor: “Mensagem recebida: Olá, servidor!”
- No cliente: “Resposta do servidor: Olá, servidor!“
3. WebSockets: Comunicação em Tempo Real
Os WebSockets permitem comunicação bidirecional entre cliente e servidor.
Exemplo: Criando um Chat com WebSockets (Node.js e HTML)
Servidor WebSocket (Node.js)
const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });
server.on('connection', (socket) => {
console.log('Cliente conectado.');
socket.on('message', (message) => {
console.log('Mensagem recebida:', message);
socket.send(`Servidor recebeu: ${message}`);
});
socket.on('close', () => console.log('Cliente desconectado.'));
});
console.log('Servidor WebSocket rodando na porta 8080');Cliente WebSocket (HTML + JavaScript)
<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<title>Chat WebSocket</title>
</head>
<body>
<h2>Chat WebSocket</h2>
<input type="text" id="mensagem" placeholder="Digite uma mensagem">
<button onclick="enviarMensagem()">Enviar</button>
<p id="resposta"></p>
<script>
const socket = new WebSocket('ws://localhost:8080');
socket.onmessage = (event) => {
document.getElementById('resposta').innerText = event.data;
};
function enviarMensagem() {
const mensagem = document.getElementById('mensagem').value;
socket.send(mensagem);
}
</script>
</body>
</html>Testando
- Inicie o servidor WebSocket:
node servidor.js. - Abra o HTML no navegador e envie mensagens.
- Veja a resposta do servidor sendo exibida na página.
4. Resolução de DNS com Exemplo Prático
O DNS converte nomes de domínio em endereços IP.
Exemplo: Fazendo uma Consulta DNS em Node.js
const dns = require('dns');
dns.lookup('google.com', (err, address) => {
if (err) throw err;
console.log(`Endereço IP do Google: ${address}`);
});Testando
Execute o script com node dns.js.
- Saída esperada:
Endereço IP do Google: 142.250.217.206(pode variar).
5. Testando IPv4 e IPv6
Para verificar o endereço IPv4 e IPv6 do seu dispositivo, use o seguinte comando:
ipconfig (Windows)
ifconfig (Linux/Mac)Ou execute o seguinte código em Node.js:
const os = require('os');
const interfaces = os.networkInterfaces();
for (let nome in interfaces) {
interfaces[nome].forEach((info) => {
console.log(`${nome}: ${info.family} - ${info.address}`);
});
}Saída esperada (Exemplo):
Wi-Fi: IPv4 - 192.168.1.10
Wi-Fi: IPv6 - fe80:4567ef90
6. Simulando uma CDN
Uma CDN distribui conteúdo para melhorar a performance.
Exemplo: Servindo Arquivos Estáticos com Express.js (Simulação de CDN)
const express = require('express');
const app = express();
app.use('/static', express.static('public')); // Pasta pública para arquivos estáticos
app.listen(3000, () => {
console.log('Servidor rodando em http://localhost:3000/static/arquivo.jpg');
});- Crie uma pasta
public/e adicione uma imagemarquivo.jpg. - Execute o servidor com
node cdn.js. - Acesse
http://localhost:3000/static/arquivo.jpgno navegador.
Isso simula um CDN, servindo arquivos de forma otimizada.
Conclusão
Com esses exemplos práticos, você pode testar e entender melhor conceitos essenciais como HTTP, TCP/IP, WebSockets, DNS, IPv4/IPv6 e CDNs.