Protocolos e Infraestrutura Web
Protocolo TCP
TCP (Transmission Control Protocol) é um protocolo da internet que permite comunicação confiável entre dois computadores, como cliente e servidor.
Handshake TCP é um processo inicial de "aperto de mãos", feito em três etapas (conhecidas como Three-Way Handshake):
-
Cliente → Servidor: SYN (synchronize): "Oi, quero me conectar".
-
Servidor → Cliente: SYN-ACK: "Oi, estou aqui e ouvi você!".
-
Cliente → Servidor: ACK: "Beleza, vamos nos comunicar!".
Só depois disso os dados de verdade começam a ser enviados.
O TCP é uma camada de transporte que ele serve de base para vários protocolos de aplicação tais como: HTTP/HTTPS, SMTP, POP3/IMAP, FTP, SSH, TELNET.
curl (Cliente URL)
cURL (Client URL) é uma ferramenta de linha de comando usada para transferir dados entre sistemas (ou se comunicar) usando vários protocolos, como HTTP, HTTPS, FTP, SFTP e outros. Ele é muito utilizado para fazer requisições a APIs, testar conexões e baixar arquivos diretamente pelo terminal.
Comandos Curl
Com o header é possivel configurar as informações do cabeçalho como por exemplo o host. por padrão o curl faz um GET. -s no curl é para operar no modo silencioso, sem mostrar muitos detalhes apenas os dados.
$ curl http://localhost:3000/api/v1/status --verbose # (ou -v, para mostrar detalhes)
$ curl -u meuusuario:minhasenha http://localhost:8000/produtos/ # Para acessar com usuário e senha
$ curl https://76.76.21.21 --insecure -v # acessa uma url ignorando o certificado de segurança (SSL) https
$ curl https://76.76.21.21 --insecure -v --header 'Host: diogomamedio.com.br'
$ curl -X POST http://diogomamedio.com.br/api/v1/migrations #Faz uma verificação post
$ curl -s http://localhost:3000/api/v1/status | python3 -m json.tool # Mostra objetos json com formatação
$ curl -s http://localhost:3000/api/v1/status | jq # Mesma coisa acima, mas em linux
$ watch 'curl -s http://localhost:3000/api/v1/status | jq' # mesma coisa acima, mas atualiza de 2 em 2 seg.
Domínios e DNS
O registrador é a empresa onde você compra e gerencia o registro de um domínio. No Brasil, o registry responsável pelos domínios “.br” é o NIC.br (Núcleo de Informação e Coordenação do Ponto BR), que mantém a lista oficial de nomes de domínio e gerencia a infraestrutura do DNS para essa extensão.
A Zona TLD (Top-Level Domain) é a parte final de um domínio na hierarquia do Sistema de Nomes de Domínio (DNS). Ela define a categoria ou localização do domínio, como .com, .org, .net, .gov, .br, entre outras.
Para verificar os registros DNS padrão que o registrador atribui ao seu domínio, você pode utilizar ferramentas como What's My DNS. Ao selecionar a opção NS (Nameservers), é possível ver quais servidores de nomes estão configurados para o domínio. Por exemplo, um domínio registrado na Locaweb pode exibir nameservers como:
ns1.locaweb.com.brns2.locaweb.com.br
Após registrar um domínio, é necessário configurar um servidor DNS para apontar corretamente para o seu site ou serviço. Esse processo envolve:
- Definir os nameservers: No painel do registrador, altere os servidores de nomes para aqueles do seu provedor de hospedagem.
- Ativar a resolução DNS: Certifique-se de que o servidor de hospedagem aceita requisições para o domínio.
- Configurar os registros DNS: Registre entradas como A (endereço IP do servidor), CNAME (alias para outro domínio) e MX (e-mails) conforme necessário.
Adicionar seu domínio na Cloudflare
É possivel usar o cloudflare para gerenciar e fazer o apontamento dos subdominios para seu/seus aplicativo(s). No painel do seu servidor dns (locaweb, hostgator etc...) deve se configurar nameservers da cloudflare (para apontar para cloudflare). E por sua vez a cloudflare redirecionará para o servidor correto.
-
Vá para https://dash.cloudflare.com/ e faça login.
-
Clique em Adicionar site (Add site).
-
Digite seu domínio (ex:
seudominio.com.br) e prossiga. -
A Cloudflare vai escanear seus DNS atuais.
-
Depois, você deve alterar os servidores DNS no painel da Locaweb para os servidores indicados pela Cloudflare (ex:
aria.ns.cloudflare.com, etc). -
Após a propagação do DNS (pode levar algumas horas), seu domínio estará ativo na Cloudflare.
Configurar Tunel Cloudflare
Na parte da autenticação (cloudflared tunnel login) aparecerá uma mensagem como: Please open the following URL and log in with your Cloudflare account: https://dash.cloudflare.com/argotunnel?aud=&callback=https%3A%2F%2Flogin.cloudflareaccess.org%2FoMDvVXSgn51w8mUyzlkVUPR6Gjm3q6Mz1XKX7_ST_Cs%3D Leave cloudflared running to download the cert automatically. Clique no link que aparecerá no terminal para fazer a authenticação indicando o dominio do qual você quer fazer o tunel. após autorização aparecerá algo como: You have successfully logged in. Your certificate has been saved to /home/diogomamedio/.cloudflared/cert.pem.
Ao Criar o tunel, aparecerá algo como: Created tunnel meu-tunel with id 4f55f724-da63-4582-9b8d-f311062031cf. Use para configurar o config.yml.
Tunnel credentials written to /home/diogomamedio/.cloudflared/4f55f724-da63-4582-9b8d-f311062031cf.json
$ wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O cloudflared # download do binário em seu servidor
$ chmod +x cloudflared # permissão de execução
$ sudo mv cloudflared /usr/local/bin/ # mover para diretórios binários
$ cloudflared --version # verificar instalação
$ cloudflared tunnel login # autenticação com sua conta na cloudflare
$ cloudflared tunnel create meu-tunel # cria o tunel
$ cloudflared tunnel route dns meu-tunel recipes.diogomamedio.com.br # configura o DNS do tunel para o subdomínio.
$ mkdir -p ~/.cloudflared # cria a pasta para o arquivo de configuração yaml.
$ cloudflared tunnel run meu-tunel # após criar o arquivo yaml rode o tunel.
tunnel: 4f55f724-da63-4582-9b8d-f311062031cf
credentials-file: /home/diogomamedio/.cloudflared/4f55f724-da63-4582-9b8d-f311062031cf.json
ingress:
- hostname: recipes.diogomamedio.com.br
service: http://localhost:80
- service: http_status:404
Seguindo a configuração do tunel, crie o arquivo config.yml dentro de ~/.cloudflared com este conteúdo com base nas informações de id do create tunel.
SSL - TSL
SSL (Secure Sockets Layer) é um protocolo de segurança que criptografa a comunicação entre um cliente (como um navegador) e um servidor web. Ele garante que os dados transmitidos sejam protegidos contra interceptação e manipulação por terceiros. Hoje, o SSL foi substituído pelo TLS (Transport Layer Security), que é uma versão mais segura e moderna, mas o termo "SSL" ainda é amplamente utilizado. Quando um site usa SSL/TLS, ele tem um certificado digital emitido por uma Autoridade Certificadora (CA), permitindo que os navegadores validem sua identidade e estabeleçam conexões seguras. Isso é indicado pelo cadeado na barra de endereços do navegador e pelo uso de HTTPS em vez de HTTP.
As aplicação podem recusar a conexão com algum servidor que forneça certificado auto assinado (como a digital ocean que tem seu próprio certificado SSL). A aplicação já vem por padrão com esses certificados para confrontar com o certificado vindo do servidor. Para permitir uma conexão com contrato autoassinado
- Baixe o certificado do seu servidor (exemplo de formato:
ca-certificate.crt) - Abra em sua IDE, e do começo ao fim substituía as quebras de linhas invisíveis por
\n - Cole na propriedade da variável de ambiente (exemplo:
POSTGRES_CA) e se necessário no arquivo.env.
Exemplo Certificado Auto-assinado

Configuração de Servidores
ClickOps vs IaC (Infrastructure as Code)
Esses dois conceitos estão relacionados à maneira como gerenciamos infraestrutura na nuvem ou servidores.
ClickOps refere-se à prática de configurar infraestrutura manualmente através de interfaces gráficas, como AWS Console, Azure Portal ou Google Cloud Console. Você acessa o painel da AWS.Clica para criar uma nova instância EC2.Escolhe configurações manualmente (CPU, memória, rede etc.).Salva e finaliza a configuração.
IaC (Infraestrutura como Código) é uma abordagem onde definimos e gerenciamos infraestrutura usando código em vez de configurar manualmente. Você escreve um arquivo em Terraform, Ansible, AWS CloudFormation ou Kubernetes YAML. Esse código define servidores, redes, bancos de dados etc.O código é executado e a infraestrutura é criada automaticamente.
Ao configurar uma instancia de banco de dados considere a convenção, nome do ambiente - nome do serviço. exemplo: production-postgres.
No serviço de hospedagem do sistema (como a versel) configure as variáveis de ambiente, geralmente em settings e desmarque os ambiente de preview ou staging (homologação) e desenvolvimento, deixe apenas produção. Depois faça um redeploy para recarregar a instancia com as novas variáveis.
SMTP
SMTP (Simple Mail Transfer Protocol) é um protocolo de comunicação usado para o envio de e-mails através da internet. Ele é responsável por transmitir mensagens de um remetente para um servidor de e-mail e, posteriormente, para o servidor de destino, de onde o destinatário pode acessá-las.
HTTP
O HTTP (Protocolo de Transferência de Hipertexto) é o protocolo fundamental da web que permite a comunicação entre dispositivos na internet. Ele funciona como um sistema de mensagens onde o cliente (geralmente um navegador) faz solicitações ao servidor, que responde com informações específicas sobre o resultado da operação.

Códigos de Status HTTP
Os códigos de status são números que indicam o resultado de cada solicitação HTTP. Eles são divididos em cinco classes principais:
- 1xx - Respostas Informativas
- Indicam que a solicitação está sendo processada
- Exemplo: 100 Continue - O servidor recebeu os cabeçalhos e pode continuar com o corpo da mensage
- 2xx - Respostas Bem-sucedidas
- 200 OK - Solicitação bem-sucedida
- 201 Created - Recurso criado com sucesso
- 204 No Content - Sem conteúdo para retorna
- 3xx - Redirecionamentos
- 301 Moved Permanently - Recurso mudou de URL permanentemente
- 302 Found - Recurso temporariamente em outro local
- 304 Not Modified - Conteúdo não foi modificado desde a última requisiçã
- 4xx - Erros do Cliente
- 400 Bad Request - Solicitação malformada
- 401 Unauthorized - Autenticação necessária
- 403 Forbidden - Acesso proibido
- 404 Not Found - Recurso não encontrad
- 5xx - Erros do Servidor
- 500 Internal Server Error - Erro interno do servidor
- 502 Bad Gateway - Erro na comunicação entre servidores
- 503 Service Unavailable - Servidor sobrecarregado ou em manutenção
WebSocket
WebSocket é uma tecnologia que permite comunicação em tempo real e bidirecional entre o navegador do usuário (cliente) e o servidor sem precisar recarregar a página ou ficar fazendo várias requisições HTTP. Mas conexões WebSocket começam como uma conexão HTTP comum, e depois "pede uma promoção" (upgrade) para WebSocket (no cabeçalho).
| HTTP | WebSocket |
|---|---|
| Cliente faz uma requisição e servidor responde (conexão curta) | Conexão permanente e aberta |
| Unidirecional | Bidirecional (cliente e servidor trocam mensagens a qualquer momento) |
| Cada nova requisição reabre a conexão | Uma vez conectados, ficam "conversando" |
🧠 Exemplo prático de uso de WebSocket:
-
Aplicações em tempo real, como:
-
Chats
-
Streamlit (usa WebSocket internamente)
-
Jogos online
-
Painéis que atualizam dados automaticamente
-
DTO (Data Transfer Object)
DTO - Data Transfer Object (Objeto de Transferência de Dados). É um padrão de projeto usado principalmente para transportar dados entre diferentes camadas de uma aplicação (especialmente entre o backend e o frontend, ou entre serviços) sem conter a logica do negocio, apenas os dados que devem ser expostos. DTO é um objeto que carrega dados entre processos ou camadas de uma aplicação.
No DRF, os serializers geralmente atuam como DTOs, controlando o que entra e o que sai da sua API.