HTTP vs HTTPS: por que o navegador mostra 'não seguro'

HTTPS é o HTTP trafegando dentro de uma conexão criptografada com TLS, e o HTTP puro vai em texto aberto. O navegador marca 'não seguro' porque qualquer rede no caminho pode ler ou alterar uma página HTTP.

Atualizado em 6 min de leitura

Objetivos de aprendizado

Depois de ler este artigo, você vai conseguir:

  • Entender o que muda entre HTTP e HTTPS na prática
  • Descobrir por que o navegador mostra 'não seguro' e o que fazer
  • Migrar para HTTPS com redirecionamento, HSTS e sem conteúdo misto
Nesta página

Você digita o endereço de um site e o navegador mostra "Não seguro" ao lado dele. Na maioria das vezes a causa é simples: o site foi aberto por http:// em vez de https://. A diferença é uma letra no endereço, mas muda quem consegue ler o que trafega entre você e o servidor.

Os navegadores ficaram cada vez mais insistentes com esse aviso, e um site só em HTTP perde visitantes. Migrar um site ou API para HTTPS sem quebrar links, cookies nem imagens leva quatro passos, descritos mais abaixo.

HTTPtexto abertoNavegadorNão seguroServidorWi-Fi públicoquem está na rede vê:GET /loginCookie: sessao=7f3a9cusuario=ana&senha=1234HTTPSHTTP dentro de uma conexão TLSNavegadorcadeadoServidorWi-Fi públicoquem está na rede vê:destino: exemplo.com17 03 03 a7 f3 9c 0e 514b d2 88 1e c6 5a …
Em HTTP, qualquer rede no caminho lê e pode alterar tudo; em HTTPS, ela vê o destino, mas não o conteúdo.

Qual é a diferença entre HTTP e HTTPS?#

HTTP é o protocolo que define como navegador e servidor trocam requisições e respostas. Ele não criptografa nada: URL, cabeçalhos, cookies e corpo da resposta viajam em texto aberto. HTTPS é o mesmo HTTP, só que dentro de uma conexão protegida por TLS. A aplicação continua falando HTTP; o TLS cuida de cifrar, detectar alterações e provar a identidade do servidor.

HTTP HTTPS
Porta padrão 80 443
Dados em trânsito Texto aberto Criptografados
Alteração no caminho Passa despercebida Detectada
Identidade do servidor Não verificada Verificada por certificado
Certificado Não usa Obrigatório
HTTP/2 e HTTP/3 nos navegadores Não Sim
Aviso do navegador "Não seguro" Cadeado, sem aviso

Os navegadores só usam HTTP/2 e HTTP/3 sobre TLS. Na prática, HTTPS costuma ser tão rápido quanto HTTP, e muitas vezes mais.

Por que o navegador mostra "não seguro"?#

Porque numa conexão HTTP qualquer equipamento no caminho vê e pode alterar a página: o Wi-Fi do café, o roteador do hotel, o provedor de internet. Isso permite roubar um cookie de sessão, trocar um link de download ou injetar anúncios e scripts na sua página sem você saber.

O Google anunciou, em outubro de 2025, que o Chrome 154 passaria a ativar por padrão a opção "Always Use Secure Connections" para sites públicos. Com a opção ligada, o Chrome pede permissão ao usuário antes da primeira visita a um site público sem HTTPS. O aviso não se repete para sites que a pessoa visita com frequência, e endereços privados (IPs locais e hostnames de intranet) ficam de fora. O usuário ainda pode desligar a configuração. Na prática, um site só em HTTP espanta visitantes novos antes mesmo de carregar.

O que HTTPS protege e o que não protege?#

Protege três coisas em trânsito:

  • Confidencialidade: quem intercepta vê bytes sem sentido, incluindo o caminho da URL e os cabeçalhos.
  • Integridade: qualquer alteração no meio do caminho é detectada.
  • Autenticação: o certificado confirma que você está falando com o servidor daquele domínio.

Não protege o que acontece fora da conexão. HTTPS não corrige SQL injection, senha fraca ou um servidor invadido, e o cadeado não prova que o site é honesto: um site de golpe também pode ter certificado válido. O nome do domínio e o IP de destino geralmente continuam visíveis para quem observa a rede.

Como migrar um site de HTTP para HTTPS?#

A migração tem quatro passos, nesta ordem.

  1. Tenha um certificado válido para o domínio. Autoridades como o Let's Encrypt emitem certificados DV sem custo, e a renovação é automática na maior parte das plataformas.
  2. Redirecione todo HTTP para HTTPS com um redirecionamento permanente (301 ou 308).
  3. Ative o HSTS depois de confirmar que o HTTPS funciona.
  4. Corrija o conteúdo misto, explicado mais abaixo.

Um exemplo em Node.js com Express 5, atrás de um proxy que termina o TLS (o caso mais comum em hospedagem):

js
import express from "express";

const app = express();
const HOST = process.env.PUBLIC_HOST ?? "example.com"; // seu domínio canônico

// Confia no primeiro proxy para ler X-Forwarded-Proto
app.set("trust proxy", 1);

app.use((req, res, next) => {
  if (!req.secure) {
    // Host fixo: nunca monte o redirecionamento a partir de um cabeçalho que o cliente controla
    return res.redirect(308, `https://${HOST}${req.originalUrl}`);
  }
  // 1 ano; só enviado em respostas HTTPS
  res.set("Strict-Transport-Security", "max-age=31536000");
  next();
});

app.get("/", (req, res) => res.send("Olá por HTTPS"));

app.listen(process.env.PORT || 3000);

Sem trust proxy, o app vê a conexão local do proxy (HTTP puro) e req.secure fica sempre falso, o que gera um loop de redirecionamento. Entenda o motivo em proxy reverso. O redirecionamento usa um domínio fixo porque, com trust proxy ligado, o req.hostname vem do cabeçalho X-Forwarded-Host, e montar a URL a partir dele poderia mandar o visitante para outro site.

Confira o resultado com o curl:

bash
curl -sI http://example.com | head -n 3
curl -sI https://example.com | grep -i strict-transport-security

O primeiro comando deve mostrar um redirecionamento para https://, e o segundo, o cabeçalho HSTS.

O que é HSTS e quando ativar?#

HSTS (HTTP Strict Transport Security) é um cabeçalho que diz ao navegador: "este host só deve ser acessado por HTTPS". Depois de recebê-lo, o navegador converte sozinho qualquer http:// para https:// durante o prazo max-age, em segundos, e o usuário não consegue ignorar erros de certificado. Isso fecha a brecha da primeira requisição em HTTP, que o redirecionamento sozinho deixa aberta.

http
Strict-Transport-Security: max-age=31536000; includeSubDomains

O navegador ignora o cabeçalho em respostas HTTP, então ele só vale quando enviado por HTTPS. Para entrar na lista de preload dos navegadores, o domínio precisa de max-age de pelo menos 31536000 (1 ano), includeSubDomains e preload, e o envio é feito em hstspreload.org.

Cuidado: includeSubDomains obriga todos os subdomínios a ter HTTPS funcionando. Comece com um max-age curto (por exemplo, 300) e aumente aos poucos. Sair da lista de preload depois é lento, porque depende de novas versões dos navegadores.

O que é conteúdo misto e como corrigir?#

Conteúdo misto acontece quando uma página carregada por HTTPS pede recursos por http://. É a causa mais comum de um site com certificado válido ainda parecer quebrado.

Os navegadores tratam dois grupos de forma diferente. Imagens, vídeo e áudio são atualizados automaticamente para HTTPS. Todo o resto, como scripts, folhas de estilo, iframes, fetch() e fontes, é bloqueado. Se o host do recurso for um IP em vez de um nome de domínio, até a imagem é bloqueada.

Para corrigir:

  • Troque http:// por https:// nos seus templates, ou use URLs relativas para recursos do próprio site.
  • Atualize URLs salvas no banco (conteúdo de blog, campos de imagem).
  • Confirme que o recurso externo existe em HTTPS: trocar só o esquema não adianta se o servidor de destino não responde por TLS.
  • Como rede de segurança, o cabeçalho Content-Security-Policy: upgrade-insecure-requests pede ao navegador que reescreva todas as requisições para HTTPS.

O console do navegador (aba Console, nas ferramentas de desenvolvedor) lista cada recurso bloqueado ou atualizado. Se o aviso persistir mesmo sem conteúdo misto, o problema pode ser o certificado: veja erros de certificado SSL.

Quando HTTP puro ainda é aceitável?#

Em desenvolvimento local (http://localhost) e em redes internas privadas, HTTP é comum e o Chrome não aplica o aviso a endereços privados. Em qualquer serviço acessível pela internet pública, o padrão é HTTPS, inclusive para APIs, webhooks e painéis: webhook de bots, por exemplo, costuma exigir uma URL HTTPS.

Como fazer isso na Square Cloud#

Toda aplicação web na Square Cloud ganha um subdomínio *.squareweb.app com HTTPS em todos os planos. O TLS é automático: um certificado DV é emitido e renovado sozinho, então você não gera nem renova certificados.

Para usar seu próprio domínio (a partir do plano Standard), você cria no seu registrador os registros DNS que o painel mostra e acompanha o status de validação em tempo real. O TLS é provisionado automaticamente, e o domínio continua registrado em seu nome no seu registrador.

A rede inclui CDN Anycast, HTTP/3 e WAF, e redireciona HTTP para HTTPS. Os cabeçalhos da sua aplicação, como o HSTS, passam intactos e continuam sob seu controle no código. Veja o passo a passo em domínios personalizados, o comportamento da rede em rede e CDN e, para vários apps no mesmo domínio, load balancing.

Rede

Domínio próprio, TLS automático e CDN global para o seu app

Saiba mais

Perguntas frequentes

HTTPS deixa o site mais lento?

Não de forma perceptível. O handshake TLS 1.3 custa uma ida e volta de rede, e os navegadores só usam HTTP/2 e HTTP/3 sobre HTTPS, o que costuma compensar o custo.

Preciso de HTTPS se meu site não tem login nem formulário?

Sim. Sem HTTPS, qualquer rede no caminho pode alterar a página, injetar anúncios ou código, e o navegador pode avisar o visitante antes de abrir o site.

O cadeado significa que o site é seguro?

Não. Ele indica que a conexão é criptografada e que o certificado vale para aquele domínio. Um site malicioso também pode ter HTTPS.

Por que meu site tem HTTPS mas ainda mostra 'não seguro'?

O motivo mais comum é conteúdo misto: a página carrega scripts, estilos ou outros recursos por http://. Outras causas são certificado expirado ou emitido para outro domínio.

HTTP e HTTPS usam portas diferentes?

Sim. Por padrão, HTTP usa a porta 80 e HTTPS usa a porta 443.

Próximo artigoSeu site precisa de CDN? Quando vale a penaUm site pequeno quase sempre ganha com CDN, mas o ganho depende de onde estão os visitantes e do que o site serve. Veja os critérios e quando dispensar.

Mais em Rede e domínios

Ver todos os 27 artigos