Desvendando URI, URL e URN
Este guia fornece uma visão geral de URI, URL e URN, explicando as suas diferenças e casos de utilização.
Quando desenvolvemos aplicações web, muitas vezes precisamos de chamar diferentes serviços web. Ao configurar a comunicação e conexão de diferentes serviços web, frequentemente encontramos os conceitos de URI, URL e URN. Normalmente, os utilizadores acham difícil distingui-los, o que leva ao uso misto ou incorreto. Neste artigo, vamos fornecer exemplos e explicar as diferenças entre eles para ajudar todos a compreender melhor estes conceitos e interpretá-los e utilizá-los corretamente ao ler blogs técnicos, documentação ou ao comunicar com outros engenheiros.
O que é uma URL?
Uma URL (Localizador Uniforme de Recursos) fornece o endereço na web ou a localização dos recursos na internet. É normalmente usada para especificar a localização de páginas web, ficheiros ou serviços. Uma URL fornece um formato padronizado para acessar recursos na web. É um componente chave da navegação na web, ligação e comunicação na internet.
Uma URL consiste em várias partes que, juntas, definem o endereço do recurso e o protocolo usado para acessá-lo. Vamos analisar a URL abaixo como exemplo e explicar a função de cada parte uma a uma.
-
Esquema: Este especifica o protocolo ou esquema usado para acessar os recursos, como HTTP (Protocolo de Transferência de Hipertexto), HTTPS (HTTP Seguro), FTP (Protocolo de Transferência de Ficheiros), ou outros.
O esquema na URL é
https
. -
Host: O host especifica o nome de domínio ou endereço IP do servidor que hospeda os recursos.
O host na URL é
example.logto.io
. -
Porta: (Opcional) A porta representa um número de porta específico no host para acessar o recurso. Se nenhuma porta for especificada, assume-se a porta padrão para o esquema dado.
A porta padrão para HTTP é 80, enquanto a porta padrão para HTTPS é 443.
A porta na URL é
8080
. -
Caminho: (Opcional) O caminho indica a localização ou diretório específico no servidor onde o recurso está localizado, podendo incluir diretórios e nomes de ficheiros.
O caminho na URL deve ser
/blogs/index.html
. -
Parâmetros de Consulta: (Opcional) Os parâmetros de consulta são parâmetros adicionais passados para um recurso, geralmente usados em aplicações web dinâmicas. Eles aparecem após o caminho e são separados pelo símbolo
?
.Os parâmetros de consulta na URL são
param1=value1¶m2=value2
, que são muitas vezes representados na forma de pares chave-valor, com pares separados pelo símbolo&
. Em cenários de uso real, geralmente é necessário codificação para evitar caracteres como espaços. -
Identificador de Fragmento: (Opcional) Também pode ser chamado de âncora, usado para localizar uma posição específica no recurso.
A âncora na URL é
#introduction
.
Além disso, por exemplo, ao usar serviços de ficheiros ou muitos botões "Contacte-nos" em páginas web, eles estão ligados a URLs, como:
ftp://documents.logto.io/files/legal/soc_ii.pdf
mailto:[email protected]?subject=Enterprise%20quota%20request
O que é um URI?
URI significa "Identificador Uniforme de Recursos". É uma cadeia de caracteres que identifica um recurso específico, como uma página web, ficheiro ou serviço. URI fornece uma forma de identificar e localizar recursos de forma única usando um formato padronizado.
Um URI consiste principalmente em dois componentes:
- Esquema: Indica o protocolo ou esquema usado para acessar o recurso.
- Identificador de Recurso: Identifica o recurso específico que está a ser acessado ou referenciado. O formato do identificador de recurso depende do esquema usado.
Do ponto de vista gramatical, os URIs seguem maioritariamente o mesmo formato que as URLs, conforme especificado em RFC 3986.
Embora este formato de URI seja semelhante ao das URLs, não garante o acesso a nenhum recurso na Web. Usar este formato pode reduzir conflitos de nomes em espaços de nomes.
Na seção acima, introduzimos URLs, que não apenas identificam um recurso, mas também ajudam a localizar esse recurso. Portanto, na verdade, URLs são um subconjunto apropriado de URIs.
O que é um URN?
URN pode não ser tão comum quanto URL e URI. Significa "Nome Uniforme de Recurso", e o seu âmbito é identificar recursos de forma persistente, mesmo que tais recursos já não existam.
Ao contrário de uma URL, um URN não fornece nenhuma informação sobre como localizar o recurso; ele apenas o identifica, tal como um URI puro. Especificamente, um URN é um tipo de URI com o esquema "urn" e tem a seguinte estrutura, conforme descrito em RFC 2141:
<URN>:<NID>:<NSS>
- URN: Normalmente
urn
. - Identificador de Espaço de Nomes (NID): Representa um espaço de nomes único ou sistema de identificadores que define e gerencia o URN. Ele fornece contexto e garante a unicidade do identificador. Exemplos de espaços de nomes incluem ISBN (Número Internacional Normalizado do Livro), etc.
- Cadeia Específica do Espaço de Nomes (NSS): É uma cadeia de caracteres que identifica de forma única um recurso dentro do espaço de nomes especificado. O identificador em si não transmite nenhuma informação sobre a localização ou método de acesso ao recurso.
Por exemplo, um livro muito famoso que introduz sistemas de computadores CSAPP tem o seu número ISBN representado como URN urn:isbn:9780134092669
.
URNs são frequentemente usados em vários protocolos padronizados, como a asserção no protocolo SAML, que corresponde ao URN urn:oasis:names:tc:SAML:2.0:assertion
.
Na engenharia de software, também podemos definir URNs para fins específicos nos nossos próprios sistemas de acordo com as regras de nomeação de URN. Por exemplo, no Logto, para habilitar a Organização, precisas de adicionar o escopo urn:logto:scope:organizations
na configuração ao usar o SDK. Cada Organização também tem o seu próprio URN dedicado urn:logto:organization:{orgId}
.
Conclusão
A relação entre URI, URL e URN pode ser ilustrada utilizando o seguinte diagrama de Venn:
URI, URL e URN podem ser todos usados para identificar diferentes recursos, mas apenas a URL pode localizar precisamente a posição do recurso.
URI e URL podem suportar vários esquemas, como HTTP, HTTPS, FTP, mas URN pode ser considerado como suportar apenas o esquema urn
.
Todas as URLs ou URNs são URIs, mas nem todos os URIs são URLs ou URNs.