Qual é a diferença entre um URI, um URL e um URN?

As pessoas falam de URLs, URIs, e **URN***s como se elas'são coisas diferentes, mas parecem iguais a olho nu.

Quais são as diferenças distinguíveis entre eles?

Solução

De RFC 3986:

Um URI pode ser ainda classificado como um localizador, um nome, ou ambos. O O termo "Uniform Resource Locator" (URL) refere-se ao subconjunto de URIs que, além de identificarem um recurso, proporcionam um meio de localização do recurso através da descrição do seu mecanismo de acesso primário (por exemplo, a sua "localização" de rede). O termo "Uniform Resource Name" (Nome do Recurso Uniforme) (URN) tem sido usado historicamente para se referir a ambos os URIs sob a esquema de "urna" [RFC2141], que são exigidos para permanecer globalmente únicos e persistente mesmo quando o recurso deixa de existir ou se torna indisponível, e a qualquer outro URI com as propriedades de um nome.

Então todos os URLs são URIs (na verdade não exatamente - veja abaixo), e todos os URNs são URIs - mas URNs e URLs são diferentes, então você não pode dizer que todos os URIs são URLs.

EDIT: Eu já tinha pensado anteriormente que todas as URLs são URIs válidas, mas de acordo com os comentários:

**Não*** "todos os URLs são URIs". Depende da interpretação da RFC. Por exemplo, em Java o analisador URI não gosta de [ ou ] e isso é porque a especificação diz "não deve" e não "não deve".

Para que as águas fiquem mais lamacentas, infelizmente.

Se você ainda não leu a resposta de Roger Pate, eu aconselharia fazer isso também.

Comentários (20)

Eles são a mesma coisa. Uma URI é uma generalização de uma URL. Originalmente, URIs eram planejadas para serem divididas em URLs (endereços) e URNs (nomes), mas então havia pouca diferença entre uma URL e URI e URIs http eram usadas como namespaces, mesmo que não localizassem nenhum recurso.

Comentários (4)

A Wikipédia dará toda a informação que você precisa aqui. Citação a partir de http://en.wikipedia.org/wiki/URI:

Um URL é um URI que, além de identificar um recurso, fornece meios de agir ou obter uma representação do recurso, descrevendo seu mecanismo de acesso primário ou "localização" da rede.

Comentários (0)