Codificação de URL: Tudo o Que Você Precisa Saber
· 12 min de leitura
Índice
- Entendendo a Codificação de URL
- Por Que a Codificação de URL é Necessária
- Como Funciona a Codificação de URL
- Caracteres Que Precisam de Codificação
- Casos de Uso Comuns para Codificação de URL
- Codificando Diferentes Conjuntos de Caracteres
- Práticas Avançadas de Codificação
- Erros Comuns e Como Evitá-los
- Codificação de URL em Linguagens de Programação
- Considerações de Segurança
- Perguntas Frequentes
- Artigos Relacionados
Entendendo a Codificação de URL
A codificação de URL, também conhecida como codificação percentual, é um mecanismo fundamental para garantir a transmissão confiável de dados pela internet. Ela converte caracteres que não são permitidos em URLs em um formato que pode ser transmitido e interpretado com segurança por navegadores web, servidores e outras infraestruturas da internet.
Em sua essência, a codificação de URL resolve um problema simples: URLs só podem conter um conjunto limitado de caracteres do conjunto de caracteres ASCII. Quando você precisa incluir caracteres fora deste conjunto—sejam eles símbolos especiais, espaços ou caracteres não latinos—eles devem ser codificados em um formato universalmente reconhecido.
O processo de codificação substitui caracteres problemáticos por um sinal de porcentagem (%) seguido por dois dígitos hexadecimais representando o código ASCII ou UTF-8 do caractere. Isso garante que cada componente da sua URL seja transmitido exatamente como pretendido, sem interpretação incorreta ou perda de dados.
Dica rápida: Use nossa ferramenta Codificador e Decodificador de URL para codificar ou decodificar instantaneamente qualquer string de URL sem escrever código.
Por Que a Codificação de URL é Necessária
A necessidade de codificação de URL decorre das restrições de design originais da internet e da especificação de URL definida na RFC 3986. URLs foram projetadas para funcionar com um conjunto limitado de caracteres para garantir compatibilidade entre diferentes sistemas, protocolos e regiões geográficas.
Sem a codificação de URL, vários problemas críticos surgiriam:
- Ambiguidade na estrutura da URL: Caracteres especiais como
?,&e#têm significados específicos em URLs. Se esses caracteres aparecerem em seus dados sem codificação, eles serão interpretados como delimitadores de URL em vez de conteúdo. - Incompatibilidade de conjunto de caracteres: Sistemas diferentes podem interpretar a mesma sequência de bytes de forma diferente, levando a dados corrompidos ou solicitações com falha.
- Violações de protocolo: HTTP e outros protocolos da internet esperam que URLs estejam em conformidade com regras de formatação específicas. Caracteres não codificados podem causar erros de protocolo.
- Vulnerabilidades de segurança: Caracteres especiais não codificados podem ser explorados para ataques de injeção ou para contornar filtros de segurança.
Considere uma consulta de pesquisa por "gatos & cachorros" em uma URL. Sem codificação, o e comercial seria interpretado como um separador de parâmetros, potencialmente quebrando sua consulta em dois parâmetros separados. A codificação de URL transforma isso em gatos%20%26%20cachorros, preservando o significado pretendido.
A Limitação ASCII
URLs são construídas no conjunto de caracteres ASCII, que inclui apenas 128 caracteres. Destes, apenas um subconjunto—conhecido como "caracteres não reservados"—pode aparecer em URLs sem codificação. Esses caracteres não reservados incluem:
- Letras maiúsculas e minúsculas (A-Z, a-z)
- Dígitos decimais (0-9)
- Hífen (
-), ponto (.), sublinhado (_) e til (~)
Todo o resto requer codificação para garantir a transmissão e interpretação adequadas pela internet.
Como Funciona a Codificação de URL
O processo de codificação de URL segue um algoritmo direto que converte caracteres em seus equivalentes codificados em porcentagem. Entender esse processo ajuda você a solucionar problemas de codificação e escrever aplicações web mais robustas.
O Algoritmo de Codificação
Quando um caractere precisa ser codificado, o processo funciona da seguinte forma:
- Identificar o caractere: Determinar qual caractere precisa de codificação com base no componente da URL e nas regras de codificação.
- Obter o valor do byte: Converter o caractere para sua representação em bytes usando codificação UTF-8 (ou ASCII para caracteres básicos).
- Converter para hexadecimal: Expressar cada byte como dois dígitos hexadecimais.
- Adicionar prefixo de porcentagem: Preceder cada par hexadecimal com um sinal de porcentagem (
%).
Por exemplo, o caractere de espaço tem um valor ASCII de 32 (decimal) ou 20 (hexadecimal). Quando codificado, torna-se %20. O símbolo arroba (@) tem um valor ASCII de 64 (decimal) ou 40 (hexadecimal), então é codificado como %40.
Codificação Multi-Byte UTF-8
Para caracteres fora do intervalo ASCII, a codificação UTF-8 produz múltiplos bytes, cada um dos quais é codificado em porcentagem. O emoji "😀" (rosto sorridente) é codificado em UTF-8 como quatro bytes: F0 9F 98 80. Em uma URL, isso se torna %F0%9F%98%80.
Esta codificação multi-byte garante que caracteres de qualquer idioma ou conjunto de símbolos possam ser transmitidos com segurança em URLs, tornando a web verdadeiramente internacional.
Dica profissional: Ao depurar problemas de codificação de URL, use as ferramentas de desenvolvedor do seu navegador para inspecionar a URL codificada real sendo enviada. A aba Network mostra a solicitação codificada bruta, que pode revelar problemas de codificação.
Caracteres Que Precisam de Codificação
Nem todos os caracteres requerem codificação em todos os contextos, mas entender quais caracteres precisam de codificação e quando é essencial para construir aplicações web confiáveis. Os requisitos de codificação variam dependendo de qual parte da URL você está trabalhando.
Caracteres Reservados
Caracteres reservados têm significado especial na sintaxe de URL e devem ser codificados quando usados como dados em vez de delimitadores. Esses caracteres incluem:
| Caractere | Propósito em URLs | Forma Codificada |
|---|---|---|
: |
Separa esquema e host, delimitador de porta | %3A |
/ |
Separador de segmento de caminho | %2F |
? |
Marca o início da string de consulta | %3F |
# |
Marca o início do identificador de fragmento | %23 |
[ ] |
Delimitadores de endereço IPv6 | %5B %5D |
@ |
Separa credenciais do host | %40 |
! $ & ' ( ) * + , ; = |
Sub-delimitadores para vários propósitos | %21 %24 %26 %27 %28 %29 %2A %2B %2C %3B %3D |
Caracteres Inseguros
Certos caracteres são considerados inseguros porque podem ser modificados ou mal interpretados durante a transmissão. Estes sempre requerem codificação:
| Caractere | Por Que É Inseguro | Forma Codificada |
|---|---|---|
| Espaço | Pode ser removido ou convertido para + |
%20 |
" |
Usado para delimitar URLs em HTML | %22 |
< > |
Usados em tags HTML, podem ser filtrados | %3C %3E |
% |
Delimitador de codificação em si | %25 |
\ |
Separador de caminho em alguns sistemas | %5C |
^ ` { } | |
Não universalmente suportados | %5E %60 %7B %7D %7C |
Codificação Dependente de Contexto
Os requisitos de codificação diferem com base em qual componente de URL você está trabalhando. Um caractere que é seguro em um contexto pode exigir codificação em outro:
- Segmentos de caminho: Barras separam segmentos de caminho, então não devem ser codificadas a menos que façam parte do próprio nome do segmento.
- Parâmetros de consulta: E comerciais e sinais de igual têm significado especial, então devem ser codificados quando aparecem em valores de parâmetros.
- Identificadores de fragmento: A maioria dos caracteres é permitida, mas a codificação ainda é recomendada para consistência.
Casos de Uso Comuns para Codificação de URL
A codificação de URL aparece em inúmeros cenários do mundo real. Entender esses casos de uso ajuda você a reconhecer quando e como aplicar codificação em seus próprios projetos.
Consultas de Pesquisa
Mecanismos de busca dependem fortemente da codificação de URL para lidar com consultas de usuários. Quando você pesquisa por "como fazer um bolo?" no Google, a URL se torna algo como:
https://www.google.com/search?q=como+fazer+um+bolo%3F
Observe que os espaços são codificados como sinais de mais (uma codificação alternativa para espaços em strings de consulta) e o ponto de interrogação é codificado como %3F para distingui-lo do delimitador de string de consulta.
Envios de Formulários
Quando formulários HTML são enviados usando o método GET, os dados do formulário são codificados e anexados à URL. Considere um formulário de login com campos de nome de usuário e senha:
https://example.com/login?username=joao.silva%40example.com&password=S%40nha123%21
O endereço de e-mail e os caracteres especiais na senha são devidamente codificados para evitar problemas de interpretação.
Nota de segurança: Nunca envie dados sensíveis como senhas em parâmetros de URL. Este exemplo é apenas para ilustração. Sempre use solicitações POST com HTTPS para autenticação.
Solicitações de API
APIs RESTful frequentemente incluem parâmetros em URLs que requerem codificação. Ao filtrar resultados ou passar estruturas de dados complexas, a codificação adequada garante que a API receba exatamente o que você pretendia:
https://api.example.com/users?filter=created_at>2024-01-01&sort=-name
O símbolo de maior que no parâmetro de filtro deve ser codificado como %3E para evitar confusão com entidades HTML ou outras interpretações.
Downloads de Arquivos
Ao servir arquivos com nomes não-ASCII, a codificação de URL garante que o nome do arquivo seja transmitido corretamente:
https://example.com/downloads/Apresenta%C3%A7%C3%A3o%202024.pdf
O "ç" e o "ã" acentuados em "Apresentação" são codificados como %C3%A7 e %C3%A3 (suas representações UTF-8), permitindo que usuários em todo o mundo baixem o arquivo independentemente da codificação de caracteres de seus sistemas.
Compartilhamento em Redes Sociais
Plataformas de mídia social usam codificação de URL ao compartilhar links com texto pré-preenchido. Um link de compartilhamento do Twitter pode parecer com:
https://twitter.com/intent/tweet?text=Confira%20este%20artigo%21&url=https%3A%2F%2Fexample.com%2Fartigo
Tanto o texto do tweet quanto a URL sendo compartilhada são codificados para garantir que