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

4365

As pessoas falam sobre URLs , URIs e URNs como se fossem coisas diferentes, mas parecem iguais a olho nu.

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

Sean McMains
fonte
158
URL é mais específico que URI.
Mk12
30
Tor os webmasters assumir esta pergunta: Qual é a diferença entre URI e URL
hippietrail
162
Diagrama de Mini Venn:( URIs ( URLs ) )
icc97
29
Ainda parece haver muita confusão entre URI e URL, mesmo por aqueles que tentaram responder à pergunta. Seria benéfico para todos ver exemplos práticos de URLs que não são URIs, exemplos de URIs que não são URLs e exemplos que são URLs e URIs.
Dennis
30
Kathy: "Esse é o seu cachorro?" Bob: "Seria mais correto chamá-lo de canino". Kathy: "Não, ele é um cachorro. Você, senhor, é um pedante."
Yojimbo

Respostas:

1747

Do RFC 3986 :

Um URI pode ainda ser classificado como localizador, nome ou ambos. O termo "URL (Uniform Resource Locator") refere-se ao subconjunto de URIs que, além de identificar um recurso, fornece um meio de localizar o recurso, descrevendo seu mecanismo de acesso primário (por exemplo, sua "localização" da rede). O termo "Nome Uniforme do Recurso" (URN) tem sido usado historicamente para se referir aos dois URIs no esquema "urna" [RFC2141] , que devem permanecer globalmente únicos e persistentes, mesmo quando o recurso deixa de existir ou fica indisponível, e para qualquer outro URI com as propriedades de um nome.

Portanto, 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, portanto, você não pode dizer que todos os URIs são URLs.

EDIT: Eu pensava anteriormente que todos os URLs são URIs válidos, mas conforme os comentários:

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

Infelizmente, isso atrapalha ainda mais as águas.

Se você ainda não leu a resposta de Roger Pate , aconselho fazê-lo também.

Jon Skeet
fonte
15
Somente URIs com o esquema urn: são URNs. Um URI pode ser um URL clássico, um URN ou apenas um URI que não comece com "urn:" e não se refira à localização de um recurso.
Mark Cidade
18
Nem " todos os URLs são URIs ". Depende da interpretação do RFC. Por exemplo, em Java, o analisador de URI não gosta [ou ]e isso ocorre porque a especificação diz "não deve" e não "não deve".
Adam Gent
5
@AdamGent: RFC 3986 1.1.3: "Um URI pode ser classificado como localizador, nome ou ambos." Portanto, se URL é um tipo especial de URI, isso significa que todo URL é um URI. Não é?
Hubert
14
@ AdamGent: Isso soa como uma peculiaridade de implementação Java, e não normativa. O próprio java.net.URIdocumento diz que "todo URL é um URI, falando abstratamente, mas nem todo URI é um URL". E java.net.URLfaz coisas estranhas, como verificar a igualdade de URLs, resolvendo nomes de host para endereços IP (o que parece em desacordo com a RFC 3986 sec 6 em primeiro lugar e quebra os hosts virtuais). Eu acho que isso significa apenas que a Java Standard Library tem algum comportamento de classe inconsistente.
Andrew Janke
3
@ JonSkeet Talvez seja necessário apenas diferenciar entre padrões e implementações? Por exemplo, "formalmente, de acordo com as RFCs, todas as URLs são URIs. (Trecho da RFC.) Mas as implementações existentes podem não corresponder exatamente às especificações, possivelmente para interoperabilidade, e podem usar URLs que não são válidas pelas RFCs. E por ser uma área complicada , algumas pessoas e documentos podem usar 'URL' para significar algo diferente do especificado pela RFC ". Mais ou menos como a maioria das rotinas de validação de email não corresponde às definições de RFC.
precisa
3840

Os URIs identificam e os URLs localizam ; no entanto, os localizadores também são identificadores ; portanto, todo URL também é um URI, mas há URIs que não são URLs.

Exemplos

  • Roger Pate

Este é o meu nome, que é um identificador. É como um URI, mas não pode ser um URL, pois não informa nada sobre minha localização ou sobre como entrar em contato comigo. Nesse caso, também identifica pelo menos outras 5 pessoas somente nos EUA.

  • 4914 West Bay Street, Nassau, Bahamas

Este é um localizador, que é um identificador para esse local físico. É como um URL e um URI (já que todos os URLs são URIs) e também me identifica indiretamente como "residente de ..". Nesse caso, ele me identifica exclusivamente, mas isso mudaria se eu conseguisse uma colega de quarto.

Eu digo "gosto" porque esses exemplos não seguem a sintaxe necessária.

Confusão popular

Da Wikipedia :

Na computação, um URL (Uniform Resource Locator) é um subconjunto do URI (Uniform Resource Identifier) ​​que especifica onde um recurso identificado está disponível e o mecanismo para recuperá-lo. No uso popular e em muitos documentos técnicos e discussões verbais, é frequentemente usado incorretamente como sinônimo de URI , ... [ênfase minha]

Devido a essa confusão comum, muitos produtos e documentação usam incorretamente um termo em vez do outro, atribuem sua própria distinção ou usam-na como sinônimos.

URNs

Meu nome, Roger Pate, poderia ser como um URN (Uniform Resource Name), exceto aqueles são muito mais regulado e destinam-se a ser único em ambos espaço e tempo.

Como atualmente compartilho esse nome com outras pessoas, ele não é globalmente exclusivo e não seria apropriado como URN. No entanto, mesmo que nenhuma outra família usasse esse nome, eu sou o nome do meu avô paterno, por isso ainda não seria único ao longo do tempo. E mesmo que não fosse esse o caso, a possibilidade de nomear meus descendentes depois de mim torna isso inadequado como URN.

Os URNs são diferentes dos URLs nessa restrição rígida de exclusividade, embora ambos compartilhem a sintaxe dos URIs.

Comunidade
fonte
3
URNs are different from URLs in this rigid uniqueness constraintIsso significa que os URLs não identificam exclusivamente um local?
Eugene
30
A resposta de Roger fornece bons conselhos pragmáticos. Para a resposta oficial, vou ao W3C que publicou " URIs, URLs e URNs: ​​esclarecimentos e recomendações " em 2001. Em poucas palavras, o W3C diz que a visão contemporânea é de que tudo é um URI. URL é um conceito informal, não formal. E a confusão remonta a uma "visão clássica", que tentou distinguir rigidamente entre categorias de URI (da qual URL era uma categoria).
netjeff
5
..um localizador uniforme de recursos (URL) .. especifica onde um recurso identificado está disponível e o mecanismo para recuperá-lo . Então, em outras palavras, não existe um URL "relativo"?
Arne #
9
"Earth128: Edward-de-Leau / 6000000000569063853" é o URN, um URL ou um URI?
Edelwater
6
@edelwater: Suponho que isso é um URI como ele só identifica-lo, mas não diz nada sobre como chegar a você, a menos que você earth128 média é de algum meio de deslocação inter-planetária :)
user20358
671

URI - Identificador Uniforme de Recursos

Os URIs são um padrão para identificar documentos usando uma sequência curta de números, letras e símbolos. Eles são definidos pelo RFC 3986 - Identificador Uniforme de Recursos (URI): Sintaxe Genérica . URLs, URNs e URCs são todos os tipos de URI.

URL - Localizador uniforme de recursos

Contém informações sobre como buscar um recurso a partir de sua localização. Por exemplo:

  • http://example.com/mypage.html
  • ftp://example.com/download.zip
  • mailto:[email protected]
  • file:///home/user/file.txt
  • tel:1-888-555-5555
  • http://example.com/resource?foo=bar#fragment
  • /other/link.html (Um URL relativo, útil apenas no contexto de outro URL)

Os URLs sempre começam com um protocolo ( http) e geralmente contêm informações como o nome do host da rede ( example.com) e geralmente um caminho do documento ( /foo/mypage.html). Os URLs podem ter parâmetros de consulta e identificadores de fragmento.

URN - Nome Uniforme do Recurso

Identifica um recurso por um nome exclusivo e persistente, mas não indica necessariamente como localizá-lo na Internet. Geralmente começa com o prefixo urn: Por exemplo:

  • urn:isbn:0451450523 para identificar um livro pelo seu número de ISBN.
  • urn:uuid:6e8bc430-9c3a-11d9-9669-0800200c9a66 um identificador globalmente exclusivo
  • urn:publishing:book - Um espaço para nome XML que identifica o documento como um tipo de livro.

URNs podem identificar idéias e conceitos. Eles não estão restritos à identificação de documentos. Quando um URN representa um documento, ele pode ser traduzido em um URL por um "resolvedor". O documento pode ser baixado do URL.

URC - Citação Uniforme de Recursos

Aponta para metadados sobre um documento e não para o próprio documento. Um exemplo de URC é aquele que aponta para o código-fonte HTML de uma página como:view-source:http://example.com/

URI de dados

Em vez de localizá-lo na Internet ou nomeá-lo, os dados podem ser colocados diretamente em um URI. Um exemplo seria data:,Hello%20World.


perguntas frequentes

Ouvi dizer que não deveria mais dizer URL, por quê?

A especificação W3 para HTML diz que a hrefmarca de uma âncora pode conter um URI, não apenas um URL. Você deve conseguir inserir um URN como <a href="urn:isbn:0451450523">. Seu navegador resolveria esse URN para um URL e baixaria o livro para você.

Algum navegador realmente sabe como buscar documentos pelo URN?

Não que eu saiba, mas o navegador da Web moderno implementa o esquema de URI de dados.

A diferença entre URL e URI tem algo a ver com se é relativa ou absoluta?

Não. Os URLs relativos e absolutos são URLs (e URIs).

A diferença entre URL e URI tem algo a ver com o fato de ter parâmetros de consulta?

Não. Ambos os URLs com e sem parâmetros de consulta são URLs (e URIs).

A diferença entre URL e URI tem algo a ver com o fato de ter um identificador de fragmento?

Não. Ambos os URLs com e sem identificadores de fragmento são URLs (e URIs).

A diferença entre URL e URI tem algo a ver com quais caracteres são permitidos?

Não. Os URLs são definidos como um subconjunto estrito de URIs. Se um analisador permitir um caractere em um URL, mas não em um URI, haverá um erro no analisador. As especificações entram em detalhes sobre quais caracteres são permitidos em quais partes de URLs e URIs. Alguns caracteres podem ser permitidos apenas em algumas partes da URL, mas os caracteres por si só não fazem diferença entre URLs e URIs.

Mas o W3C agora não diz que URLs e URIs são a mesma coisa?

Sim. O W3C percebeu que há muita confusão sobre isso. Eles emitiram um documento de esclarecimento de URI que diz que agora não há problema em usar os termos URL e URI de forma intercambiável (para significar URI). Não é mais útil segmentar estritamente URIs em diferentes tipos, como URL, URN e URC.

Um URI pode ser um URL e um URN?

A definição de URN agora é mais flexível do que o que afirmei acima. A RFC mais recente em URIs diz que qualquer URI agora pode ser um URN (independentemente de começar com urn:) desde que tenha "as propriedades de um nome". Ou seja: é globalmente único e persistente, mesmo quando o recurso deixa de existir ou fica indisponível. Um exemplo: os URIs usados ​​em doctypes HTML, como http://www.w3.org/TR/html4/strict.dtd. Esse URI continuaria nomeando o tipo de documento de transição HTML4, mesmo que a página no site w3.org fosse excluída.


Diagrama de Venn URI / URL

Stephen Ostermiller
fonte
8
"C: \ myfile" é um URI, URL ou URN? ou nenhum deles.
Bvdb
12
Um caminho de arquivo não é um URL ou URI, a menos que você coloque o file://prefixo nele. Embora os navegadores geralmente lidem com caminhos de arquivos não formatados em URL. A Mozilla publica seus casos de teste para URLs de arquivos .
Stephen Ostermiller
2
Consulte a seção 1.1 da RFC - "A uniformidade oferece vários benefícios. Permite que diferentes tipos de identificadores de recursos sejam usados ​​no mesmo contexto, mesmo quando os mecanismos usados ​​para acessar esses recursos podem diferir. Permite a interpretação semântica uniforme de convenções sintáticas comuns. em diferentes tipos de identificadores de recursos ..."
Stephen Ostermiller
Você mencionou mailto:[email protected]como URL, mas outra resposta abaixo diz que é um URN? Qual é certo? É URN e URL?
user31782
5
Essa resposta é muito mais fácil de entender. Eu posso ver claramente as imagens do exemplo real dos URLs e URN. E para qualquer um ler mais sobre isso ... danielmiessler.com/study/url-uri
vee
253

Em resumo: um URI identifica, um URL identifica e localiza.

Considere uma edição específica da peça Romeu e Julieta de Shakespeare , da qual você tem uma cópia digital em sua rede doméstica.

Você pode identificar o texto como urn:isbn:0-486-27557-4.
Isso seria um URI, mas mais especificamente um URN * porque nomeia o texto .

Você também pode identificar o texto como file://hostname/sharename/RomeoAndJuliet.pdf.
Isso também seria um URI, mas mais especificamente um URL, porque ele localiza o texto .

* Nome uniforme do recurso

(Observe que meu exemplo é adaptado da Wikipedia )

Greg
fonte
6
É útil observar a urna real (para ver como ele se compara a uma URL): urn: ISBN: 0-486-27557-4
Michael Brewer-Davis
2
@ Michael - É meu entendimento que ISBN 0486275574também nomeia o texto e, portanto, se qualifica como URN. Eu escolho um formato que eu acreditava que seria mais familiar para os leitores.
Greg
2
Então, faria sentido dizer que o hash (por exemplo, SHA1) de um arquivo poderia ser um URN para esse arquivo?
johnsimer
@johnsimer Não pense assim, pois você poderia ter uma cópia de um arquivo no mesmo computador, o que resultaria no mesmo hash e, portanto, não é único.
Dennis98
141

Estas são algumas respostas muito bem escritas, mas muito longas. Aqui está a diferença no que diz respeito ao CodeIgniter :

URL - http://example.com/some/page.html

URI - /some/page.html

Simplificando, o URL é o caminho completo para identificar qualquer recurso em qualquer lugar e pode ter protocolos diferentes, como FTP, HTTP, SCP, etc.

O URI é um recurso no domínio atual, portanto, é necessário encontrar menos informações.

Em todos os casos em que o CodeIgniter usa a palavra URL ou URI, essa é a diferença da qual eles estão falando, embora no esquema geral da Web, isso não seja 100% correto.

Phil Sturgeon
fonte
10
Essa resposta pode ser simplificada demais, mas observe o contexto de sua pergunta. Vai ser mais útil para ele que falar sobre os namespaces XML!
31510 Phil Sturgeon
140
Esta resposta não é apenas errada, mas ativamente enganadora. Ambos os exemplos são URLs. E como todo URL também é um URI, isso significa que os dois exemplos são URIs. Com o objetivo de demonstrar a diferença entre URIs e URLs, isso é totalmente inútil.
Jörg W Mittag
12
Essa é a diferença no que diz respeito ao CodeIgniter. Em todos os casos, eles usam a palavra URL ou URI. Essa é a diferença sobre a qual estão falando. Portanto, no grande esquema da Web, não é 100% correto, mas no escopo da pergunta do OP (a diferença no CodeIgniter), essa resposta está perfeitamente correta.
Phil Sturgeon
12
Isto está errado. @ JörgWMittag está principalmente no ponto. URLs são URIs e são "totalmente qualificados"; portanto, o "URL" nesta resposta é ambos. Mas /some/page.htmlnão é um URI. É um "parente-ref", que é um tipo de "referência de URI". Combinado com um contexto URI básico, ele pode ser resolvido para um URI, mas não é um URI. Veja a Seção 4.1 da RFC 3986 . O CodeIgniter provavelmente está usando os termos errados e isso deve ser chamado; o Q (como editado atualmente) não está enquadrado como específico do CodeIgniter.
Andrew Janke
37
Para futuras pessoas que lêem esses comentários e estão tão confusas quanto eu: Esta resposta não foi publicada para esta pergunta. Esta questão nunca teve nada a ver com o CodeIgniter. Havia uma pergunta duplicada que mencionava especificamente o CodeIgniter, que foi fechada e teve todas as suas respostas migradas para essa pergunta. Essa resposta foi uma das que foram movidas da antiga pergunta encerrada para esta questão protegida. Mesmo assim, esta resposta é enganosa. Eu diminuí o voto - outros devem fazer o mesmo, pois, em sua nova casa, está errado. O autor deve excluí-lo ou a mesclagem ser desfeita.
ArtOfWarfare
92

Antes de tudo, tire sua mente da confusão e simplifique-a e você entenderá.

URI => Identificador Uniforme de Recursos Identifica um endereço completo do recurso, como local, nome ou ambos.

URL => Localizador uniforme de recursos Identifica a localização do recurso.

URN => Nome uniforme do recurso Identifica o nome do recurso

Exemplo

Temos o endereço https://www.google.com/folder/page.html em que,

URI (identificador uniforme de recursos) => https://www.google.com/folder/page.html

URL (Localizador uniforme de recursos) => https://www.google.com/

URN (Nome Uniforme do Recurso) => /pasta/page.html

URI => (URL + URN) ou apenas URL ou apenas URN

Eugen Konkov
fonte
66

Uma pequena adição às respostas já postadas, aqui está um diagrama de Venn para resumir a teoria (da bela explicação de Prateek Joshi ):

insira a descrição da imagem aqui

E um exemplo (também do site da Prateek):

insira a descrição da imagem aqui

Gustavo Mori
fonte
20
Acredito que a segunda ilustração esteja incorreta. Pela especificação url.spec.whatwg.org/#url-writing Um URL deve ser gravado como um URL relativo ou um URL absoluto, opcionalmente seguido por "#" e um fragmento. Assim, o #postsidentificador de fragmento pode fazer parte da URL
ruvim 4/14/14
7
As duas ilustrações se contradizem.
patapouf_ai
53

Esse é um dos tópicos mais confusos e possivelmente irrelevantes que encontrei como profissional da web.

Pelo que entendi, um URI é uma descrição de algo, seguindo um formato aceito, que pode definir ambos ou o nome exclusivo (identificação) de algo e sua localização.

Existem dois subconjuntos básicos - URLs, que definem o local (especialmente para um navegador que tenta procurar uma página da web) e URNs, que definem o nome exclusivo de algo.

Costumo pensar em URNs como sendo semelhantes aos GUIDs. Eles são simplesmente uma metodologia padronizada para fornecer nomes exclusivos para as coisas. Como no declarativo de espaço para nome que usa o nome de uma empresa - não é como se houvesse um recurso em um servidor em algum lugar para corresponder a essa linha de texto - ele simplesmente identifica algo de forma exclusiva.

Eu também tendem a evitar completamente o termo URI e discutir as coisas apenas em termos de URL ou URN, conforme apropriado, porque isso causa muita confusão. A pergunta que realmente devemos tentar responder às pessoas não é tanto a semântica, mas como identificar, ao encontrar os termos, se existe alguma diferença prática neles que mudará a abordagem de uma situação de programação. Por exemplo, se alguém me corrige na conversa e diz: "oh, isso não é um URL, é um URI", eu sei que ele é cheio disso. Se alguém disser "estamos usando um URN para definir o recurso", é mais provável que entendamos que estamos apenas nomeando-o exclusivamente, não o localizando em um servidor.

Se eu estiver fora da base - por favor me avise!

Kevin Lowe
fonte
4
Não, acho que você está certo. A semântica de URI vs URL vs URL vs URI-ref etc. é inútil para a maioria dos desenvolvedores, apenas porque gera um debate inútil (improdutivo, insignificante para a tomada de decisão). Se a API do Google fosse usada em redirect_urlvez de redirect_uri, alguém realmente se importaria?
53

Identidade = Nome com Localização

Cada URL ( U niform R esource L ocator) é um URI ( U niform R esource I dentifier), abstratamente falando, mas cada URI não é uma URL. Há uma outra subcategoria da URI é URN ( U niform R esource N AME), que é um recurso nomeado, mas não especificar como localizá-los, como mailto, notícias, ISBN é URIs. Fonte

insira a descrição da imagem aqui

URNA:

  • Formato URN: urn:[namespace identifier]:[namespace specific string]
  • urn: e: defendem-se.
  • Exemplos :
    • urn: uuid: 6e8bc430-9c3a-11d9-9669-0800200c9a66
    • urna: ISSN: 0167-6423
    • urna: isbn: 096139210x
    • ARNs (Amazon Resource Names) é um recurso exclusivo da AWS para identificação.
      • Formato ARN: arn:partition:service:region:account-id:resource

URL:

  • Formato do URL: [scheme]://[Domain][Port]/[path]?[queryString]#[fragmentId]
  • :, // ,? e # representam a si mesmos.
  • os esquemas são https, ftp, gopher, mailto, notícias, telnet, arquivo, homem, informações, whatis, ldap ...
  • Exemplos:

Analogia:
Para alcançar uma pessoa: Dirigir (protocolo outros SMS, email, telefone), Endereço (nome do host outro número de telefone, emailid) e nome da pessoa (nome do objeto com um caminho relativo).

Premraj
fonte
Qualificação menor: deve haver dois pontos entre [domínio] e [porta]. IE: example.com:1234
Rex Schrader
42

URI => http://en.wikipedia.org/wiki/Uniform_Resource_Identifier

URLs são um subconjunto de URIs (que também contêm URNs).

Basicamente, um URI é um identificador geral, em que um URL especifica um local e um URN especifica um nome.

Craig Wilson
fonte
1
URLs não são um subconjunto verdadeiro de URI. Você pode criar URLs válidos com caracteres [e ]não um URI.
Adam Gent
4
Os colchetes não são válidos em URIs ou URLs. Veja esta pergunta que tem muitas referências às especificações: colchetes são permitidos em URLs? . Quando os colchetes aparecerem em um deles, eles deverão ser codificados.
Stephen Ostermiller
35

Outro exemplo que eu gosto de usar quando penso em URIs é o atributo xmlns de um documento XML:

<rootElement xmlns:myPrefix="com.mycompany.mynode">
    <myPrefix:aNode>some text</myPrefix:aNode>
</rootElement>

Nesse caso, com.mycompany.mynode seria um URI que identifica exclusivamente o espaço de nome "myPrefix" para todos os elementos que o usam no meu documento XML. Este NÃO é um URL, pois é usado apenas para identificar, não para localizar algo em si.

DC
fonte
28

Devido a dificuldades em distinguir claramente entre URI e URL, tanto quanto me lembro, o W3C não faz mais diferença entre URI e URL ( http://www.w3.org/Addressing/ ).

manuel aldana
fonte
Talvez eu tenha perdido essa parte, mas não vejo nenhuma referência no link fornecido para eles, removendo a distinção entre URL e URI, apenas reconhecendo a confusão e desejando que as especificações que referenciam incorretamente a URL sejam atualizadas para referência ao URI.
Tim Gautier
27

Eles são a mesma coisa . Um URI é uma generalização de um URL. Originalmente, os URIs eram planejados para serem divididos em URLs (endereços) e URNs (nomes), mas havia pouca diferença entre um URL e os URIs e os URLs http eram usados ​​como espaços de nome, mesmo que eles não localizassem realmente nenhum recurso.

Mark Cidade
fonte
Eu pensei que era o contrário. Um URL se refere a um objeto concreto e um URI pode se referir a isso ou a um conceito ou a qualquer outra coisa.
Chris Charabaruk 6/10/08
4
Uma URL localiza um recurso e é um tipo de URI, que identifica um recurso.
Mark Cidade
É verdade que eles são a mesma coisa porque a definição de URL mudou ao longo do tempo. Os URLs costumavam ser um tipo específico de URI, mas, devido à confusão causada, o W3C redefiniu o URL como URI.
Stephen Ostermiller
25

URI e URL

URI, URL, URN

Como a imagem acima indica, existem três componentes distintos em jogo aqui. Geralmente, é melhor ir à fonte ao discutir assuntos como esses, então, aqui está um esforço de Tim Berners-Lee, et. al. no RFC 3986: URI (Uniform Resource Identifier): Sintaxe genérica:

Um URI (Uniform Resource Identifier) ​​é uma sequência compacta de caracteres que identifica um recurso abstrato ou físico.

Um URI pode ainda ser classificado como localizador, nome ou ambos. O termo "URL (Uniform Resource Locator") refere-se ao subconjunto de URIs que, além de identificar um recurso, fornece um meio de localizar o recurso, descrevendo seu mecanismo de acesso primário (por exemplo, sua "localização" da rede).

Adiii
fonte
21

URI é o tipo da super classe de URLs e URNs. A Wikipedia tem um bom artigo sobre eles, com links para o conjunto certo de RFCs.

André
fonte
17

A Wikipedia fornecerá todas as informações que você precisa aqui. Citando http://en.wikipedia.org/wiki/URI :

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

Peter Boughton
fonte
16

URL

Uma URL é uma especialização de URI que define o local da rede de um recurso específico. Ao contrário de um URN, o URL define como o recurso pode ser obtido. Usamos URLs todos os dias na forma de http://example.cometc. Mas uma URL não precisa ser uma URL HTTP, pode ser ftp://example.cometc. também.

URI

Um URI identifica um recurso por local ou nome ou ambos. Na maioria das vezes, a maioria de nós usa URIs que definem um local para um recurso. O fato de um URI poder identificar recursos por nome e local levou a muita confusão na minha opinião. Um URI tem duas especializações conhecidas como URL e URN.

Diferença entre URL e URI

Um URI é um identificador para algum recurso, mas um URL fornece informações específicas sobre como obter esse recurso. Um URI é uma URL e, como um comentarista apontou, agora é considerado incorreto usar a URL ao descrever aplicativos. Geralmente, se o URL descreve o local e o nome de um recurso, o termo a ser usado é URI. Como geralmente é o caso que a maioria de nós encontra todos os dias, URI é o termo correto.

Sujit
fonte
15

Conforme a RFC 3986 , os URIs são compostos pelas seguintes partes:

scheme://authority/path?query

O URI descreve o protocolo para acessar um recurso ( caminho ) ou aplicativo ( consulta ) em um servidor ( autoridade ).

Digite a descrição da imagem aqui

Todos os URLs são URIs e todos os URNs são URIs, mas todos os URIs não são URLs.

Consulte para mais detalhes:

Wikipedia

Prashanth Sams
fonte
3
Isso não me ensina nada que não seja coberto pelas outras respostas com pelo menos 6 anos de idade e que sejam muito mais completas e tente explicar como distinguir URIs de URLs.
Ccjmne 6/09/14
2
É importante observar que a imagem é um diagrama de Venn , embora não pareça um diagrama típico. Vi pessoas tentando interpretá-lo como "partes do URL". Este diagrama não diz que os URIs começam com uma URL e terminam com uma URN.
Stephen Ostermiller
14

Um URI identifica um recurso por local ou nome ou ambos. Na maioria das vezes, a maioria de nós usa URIs que definem um local para um recurso. O fato de um URI poder identificar recursos por nome e local levou a muita confusão na minha opinião. Um URI tem duas especializações conhecidas como URL e URN.

Uma URL é uma especialização de URI que define o local da rede de um recurso específico. Ao contrário de um URN, o URL define como o recurso pode ser obtido. Usamos URLs todos os dias na forma de http://stackoverflow.com , etc. Mas uma URL não precisa ser uma URL HTTP, pode ser ftp://example.com, etc.

Swapnil
fonte
11

Embora os termos URI e URL sejam estritamente definidos, muitos usam os termos para outras coisas além das definidas.

Vamos pegar o Apache por exemplo. Se http://example.com/foo for solicitado em um servidor Apache, você terá as seguintes variáveis ​​de ambiente definidas:

  • REDIRECT_URL: /foo
  • REQUEST_URI: /foo

Com mod_rewrite ativado, você também terá estas variáveis:

  • REDIRECT_SCRIPT_URL: /foo
  • REDIRECT_SCRIPT_URI: http://example.com/foo
  • SCRIPT_URL: /foo
  • SCRIPT_URI: http://example.com/foo

Este pode ser o motivo de algumas das confusões.

quiabo
fonte
10

Veja este documento . Especificamente,

uma URL é um tipo de URI que identifica um recurso por meio de uma representação de seu mecanismo de acesso primário (por exemplo, sua "localização" da rede)), e não por outros atributos que possa ter.

Não é um termo extremamente claro, realmente.

avpx
fonte
10

Depois de ler as postagens, encontro alguns comentários muito relevantes. Em resumo, a confusão entre as definições de URL e URI é baseada em parte em qual definição depende de qual e também no uso informal da palavra URI no desenvolvimento de software.

Por definição, o URL é um subconjunto do URI [RFC2396]. URI contém URN e URL. Tanto o URI quanto o URL têm sua própria sintaxe específica, que confere a eles o status de URI ou URL. URN são para identificar exclusivamente um recurso, enquanto o URL é para localizar um recurso. Observe que um recurso pode ter mais de um URL, mas apenas um único URN. [RFC2611]

Como desenvolvedores e programadores da Web, quase sempre nos preocupamos com URL e, portanto, com URI. Agora, um URL é definido especificamente para ter todo o esquema de partes: parte específica do esquema, como por exemplo https://stackoverflow.com/questions . Este é um URL e também é um URI. Agora considere um link relativo incorporado à página, como ../index.html. Este não é mais um URL por definição. Ainda é o que é chamado de "referência de URI" [RFC2396].

Acredito que quando a palavra URI é usada para se referir a caminhos relativos, "referência de URI" é realmente o que está sendo pensado. Tão informalmente, os sistemas de software usam o URI para se referir ao caminho relativo e à URL do endereço absoluto. Portanto, nesse sentido, um caminho relativo não é mais uma URL, mas ainda é um URI.

paul r
fonte
10

Aqui está a minha simplificação:

URN: nome exclusivo do recurso, ou seja, "o quê" (por exemplo, urn: issn: 1234-5678). Isso deve ser único. Como em dois documentos diferentes, a mesma urna não pode ser usada. Um pouco como "uuid"

URL: "onde" para encontrá-lo (por exemplo, https://google.com/pub?issnid=1234-5678 .. ou ftp://somesite.com/doc8.pdf )

URI: pode ser um URN ou um URL. Esta definição difusa é graças ao RFC 3986 produzido pelo W3C e IETF.

A definição de URI mudou ao longo dos anos, por isso faz sentido que a maioria das pessoas fique confusa. No entanto, agora você pode se consolar com o fato de poder consultar http://somesite.com/something como URL ou URI ... e você estará certo de qualquer maneira (pelo menos por enquanto). .)

jjolla
fonte
9

Eu estava pensando sobre a mesma coisa e encontrei o seguinte: http://docs.kohanaphp.com/helpers/url .

Você pode ver um exemplo claro usando o url::current()método Se você tiver este URL : o http://example.com/kohana/index.php/welcome/home.html?query=stringuso url:current()fornece o URI que, de acordo com a documentação, é: bem - vindo / home

Dierre
fonte
1
Esta resposta está errada. Um URI não faz parte da URL. Em vez disso, os URLs são um tipo de URI. Além disso, a ligação nesta resposta é quebrada (e eu não posso encontrar um substituto adequado.)
Stephen Ostermiller
8

Os URIs surgiram da necessidade de identificar recursos na Web e outros recursos da Internet , como caixas de correio eletrônicas, de maneira uniforme e coerente. Portanto, pode-se introduzir um novo tipo de widget: URIs para identificar recursos do widget ou usar tel: URIs para ter links da Web, fazendo com que chamadas telefônicas sejam feitas quando invocadas.

Alguns URIs fornecem informações para localizar um recurso (como um nome de host DNS e um caminho nessa máquina), enquanto outros são usados ​​como nomes de recursos puros. A URL é reservada para identificadores que são localizadores de recursos , incluindo URLs 'http' como http://stackoverflow.com , que identifica a página da web no caminho especificado no host. Outro exemplo são os URLs 'mailto', como mailto: [email protected] , que identifica a caixa de correio no endereço fornecido.

URNs são URIs usados ​​como nomes puros de recursos em vez de localizadores. Por exemplo, o URI: mid: [email protected] é um URN que identifica a mensagem de email que a contém em seu campo 'Message-Id'. O URI serve para distinguir essa mensagem de qualquer outra mensagem de email. Mas ele próprio não fornece o endereço da mensagem em nenhuma loja.

dpant
fonte
7

Para responder a isso, vou me basear em uma resposta que eu modifiquei para outra pergunta . Um bom exemplo de um URI é como você identifica um recurso do Amazon S3. Vamos levar:

s3://www-example-com/index.html [FIG. 1]

que eu criei como uma cópia em cache de

http://www.example.com/index.html [FIG. 2]

no datacenter S3-US-West-2 da Amazon .

Mesmo que o StackOverflow me permita vincular ao esquema de s3:// protocolo , não ajudaria em localizar o recurso. Porque identifica um recurso , fig. 1 é um URI válido. Também é um URN válido, porque a Amazon exige que o bucket (seu termo para a authorityparte do URI) seja exclusivo entre os datacenters. É útil localizá-lo, mas não indica o datacenter. Portanto, ele não funciona como um URL.

Então, como o URI, URL e URN diferem nesse caso?

NOTA: O RFC 3986 define URIs comoscheme://authority/path?query#fragment

Bruno Bronosky
fonte
6

Fácil de explicar:

Vamos assumir o seguinte

URI é o seu nome

URL é o seu endereço com o seu nome para se comunicar com você.

  • meu nome é Loyola

    Loyola é URI

  • meu endereço é TN, Chennai 600001.

TN, Chennai 600 001, Loyola é URL

Espero que você entenda,

Agora vamos ver um exemplo preciso

http://www.google.com/fistpage.html

acima, você pode se comunicar com uma página chamada firstpage.html ( URI ) usando o seguinte http://www.google.com/fistpage.html ( URL ).

Portanto, o URI é um subconjunto de URL, mas não vice-versa.

loyola
fonte
4
Esta resposta é enganosa. Quote from Wikipedia "Um nome de recurso uniforme (URN) funciona como o nome de uma pessoa, enquanto um URL (Uniform Resource Locator) se parece com o endereço da rua. Em outras palavras: o URN define a identidade de um item, enquanto o URL fornece um método para localizar isto." Além disso, URNs e URLs são URIs.
Vegan Sv
4

Um URI (Uniform Resource Identifier) ​​é uma sequência de caracteres que identifica um Recurso na Internet.

O URI mais comum é o URL (Uniform Resource Locator) que identifica um endereço de domínio da Internet. Outro tipo de URI não tão comum é o Universal Resource Name (URN).


fonte
4

Eu encontrei:


Um identificador de recurso uniforme (URI) representa uma imagem geral. Você pode dividir URIs / URIs podem ser classificados como localizadores (URLs), ou como nomes (URLs), ou ambos. Então, basicamente, um URN funciona como o nome de uma pessoa e o URL representa o endereço dessa pessoa. Para encurtar a história, um URN define a identidade de um item, enquanto o URL fornece o método para encontrá-lo, e finalmente encapsular esses dois conceitos é o URI

Rakeeb Rajbhandari
fonte
2

O melhor resumo técnico ( imo) é este

IRI, URI, URL, URN e suas diferenças relação a Jan Martin Keil:

IRI, URI, URL, URN e suas diferenças

Todo mundo que lida com a Web Semântica repetidamente se depara com os termos IRI , URI , URL e URN . No entanto, frequentemente observo que há alguma confusão sobre o significado exato deles. E, é claro, outros notaram isso também (veja, por exemplo, RFC3305 ou pesquise no Google). Para ser sincero, eu até me confundi desde o início. Mas, na verdade, a questão não é tão complexa. Vamos dar uma olhada nas definições dos termos mencionados para ver quais são as diferenças:

URI

Um identificador uniforme de recursos é uma sequência compacta de caracteres que identifica um recurso abstrato ou físico. O conjunto de caracteres é limitado a US-ASCII, excluindo alguns caracteres reservados. Caracteres fora do conjunto de caracteres permitidos podem ser representados usando a Porcentagem de Codificação. Um URI pode ser usado como localizador, nome ou ambos. Se um URI é um localizador, ele descreve o mecanismo de acesso primário de um recurso. Se um URI é um nome, ele identifica um recurso, fornecendo a ele um nome exclusivo. As especificações exatas de sintaxe e semântica de um URI dependem do esquema usado que é definido pelos caracteres antes dos primeiros dois pontos. [RFC3986]

URNA

Um Nome Uniforme de Recurso é um URI no urn do esquema destinado a servir como identificador de recurso persistente e independente de local. Historicamente, o termo também se referia a qualquer URI. [RFC3986] Um URN consiste em um NID (Namespace Identifier) ​​e uma NSS (String) específica de namespace: urn :: A sintaxe e a semântica do NSS são específicas para cada NID. Além dos DNIs registrados, existem vários outros DNIs, que não passaram pelo processo de registro oficial. [RFC2141]

URL

Um Uniform Resource Locator é um URI que, além de identificar um recurso, fornece um meio de localizar o recurso, descrevendo seu mecanismo de acesso primário [RFC3986]. Como não existe uma definição exata de URL por meio de um conjunto de esquemas, "URL é um conceito útil, mas informal", geralmente se referindo a um subconjunto de URIs que não contêm URNs [RFC3305].

IRI

Um identificador de recurso internacionalizado é definido de maneira semelhante a um URI, mas o conjunto de caracteres é estendido ao conjunto de caracteres codificados universal. Portanto, ele pode conter caracteres latinos e não latinos, exceto os caracteres reservados. Em vez de estender a definição de URI, o termo IRI foi introduzido para permitir uma distinção clara e evitar incompatibilidades. Os IRIs destinam-se a substituir os URIs na identificação de recursos em situações nas quais o Conjunto Universal de Caracteres Codificados é suportado. Por definição, todo URI é um IRI. Além disso, existe um mapeamento adjetivo definido de IRIs para URIs: todo IRI pode ser mapeado para exatamente um URI, mas diferentes IRIs podem ser mapeados para o mesmo URI. Portanto, a conversão de volta de um URI para um IRI pode não produzir o IRI original. [RFC3987]

Resumindo, podemos dizer:

IRI is a superset of URI (IRI ⊃ URI)
URI is a superset of URL (URI ⊃ URL)
URI is a superset of URN (URI ⊃ URN)
URL and URN are disjoint (URL ∩ URN = ∅)

Conclusões para problemas da Web semântica

RDF permite explicitamente usar IRIs para nomear entidades [RFC3987]. Isso significa que podemos usar quase todos os caracteres nos nomes de entidades. Por outro lado, geralmente temos que lidar com o software do estado inicial. Portanto, é improvável que haja problemas usando caracteres não ASCII. Portanto, sugiro evitar nomes não URI para entidades e recomendo o uso de http URIs [LINKED-DATA]. Para resumir: use apenas URLs para nomear suas entidades. Obviamente, podemos nos referir a entidades existentes nomeadas por uma URN. No entanto, devemos evitar criar recentemente esse tipo de identificador.

Mischa
fonte