Un URI (Uniform Resource Identifier) è una sequenza di caratteri che identifica una risorsa logica o fisica. Gli identificatori di risorse universali sono specificati nell'Internet Engineering Task Force (IETF) Request for Comments (RFC) 3986 e sono riassunti ed estesi nella documentazione per l'architettura web del W3C, l'architettura del World Wide Web, volume 1. Secondo le specifiche, le risorse non devono essere accessibili su Internet. Esempi di risorse includono documenti elettronici, sensori per porte di ascensori, spazi dei nomi XML, pagine web e microchip ID per animali domestici.
Esistono due tipi di URI, Uniform Resource Identifier (URL) e Uniform Resource Names (URN).
Uniform Resource Locator (URL) - questo tipo di URI inizia affermando quale protocollo deve essere utilizzato per individuare e accedere alla risorsa fisica o logica su una rete. Se la risorsa è una pagina web, ad esempio, l'URI inizierà con il protocollo HTTP. Se la risorsa è un file, l'URI inizierà con il protocollo FTP o se la risorsa è un indirizzo di posta elettronica, l'URI inizierà con il protocollo mailto. È importante ricordare che gli URL non sono persistenti. Ciò significa che se la posizione della risorsa cambia, anche l'URL deve cambiare per puntare alla nuova posizione della risorsa.
Nome risorsa uniforme (URN) - questo tipo di URI non indica quale protocollo deve essere utilizzato per individuare e accedere alla risorsa; etichetta semplicemente la risorsa con un identificatore univoco persistente e indipendente dalla posizione. Un URN identificherà la risorsa durante il suo ciclo di vita e non cambierà mai. Ogni URN ha tre componenti: l'etichetta "urna", i due punti e una stringa di caratteri che funge da identificatore univoco.
Ogni URL è anche un URI, ma non viceversa.
Sintassi URI
La forma generica di qualsiasi URI è schema: [// [user: password @] host [: port]] [/] percorso [? query] [# fragment]
Schema: Lo schema definisce la sintassi concreta e tutti i protocolli associati per l'URI. Gli schemi non fanno distinzione tra maiuscole e minuscole e sono seguiti da due punti. Idealmente, gli schemi URI dovrebbero essere registrati presso l'Internet Assigned Numbers Authority (IANA), sebbene possano essere utilizzati anche schemi non registrati.
Sebbene le due barre mostrate nell'esempio sopra siano richieste da alcuni schemi, non sono richieste da tutti gli schemi, inclusi i componenti di autorità, che sono descritti di seguito.
Componente dell'autorità: Un componente di autorità è costituito da più parti: una sezione di autenticazione opzionale, un host - costituito da un nome registrato o da un indirizzo IP - e un numero di porta opzionale. La sezione di autenticazione contiene il nome utente e la password, separati da due punti e seguiti dal simbolo di (@). Dopo la @ viene il nome host, che a sua volta è seguito da due punti e poi da un numero di porta. È importante notare che gli indirizzi IPv4 devono essere in notazione decimale punto e gli indirizzi IPv6 devono essere racchiusi tra parentesi.
Il percorso, che contiene dati, è contrassegnato da una sequenza di segmenti separati da barre. Il percorso deve iniziare con una singola barra se era presente una parte di autorità. Può anche iniziare con una singola barra anche se non c'è una parte di autorità, ma non può iniziare con una doppia barra. Tieni presente che, sebbene questa parte della sintassi possa assomigliare molto a un particolare percorso di file, non sempre implica una relazione con quel percorso di file system.
Query (opzionale): La query contiene una stringa di dati non gerarchici. Sebbene la sintassi non sia ben definita, è molto spesso una sequenza di coppie di valori di attributo separate da un delimitatore, ad esempio una e commerciale o un punto e virgola. La query è separata dalla parte precedente da un punto interrogativo.
Frammento (opzionale): Il frammento contiene un identificatore di frammento che fornisce la direzione a una risorsa secondaria. Ad esempio, se la risorsa principale è un documento HTML, il frammento è spesso un attributo ID di un elemento specifico di quel documento. Se il frammento identifica una determinata sezione di un articolo identificato dal resto dell'URI, un browser Web farà scorrere questo particolare elemento in visualizzazione. Il frammento è separato dalla parte precedente da un cancelletto (#).
Risoluzione e riferimenti URI
La risoluzione degli URI è una delle poche operazioni comuni eseguite sugli URI che sono anche URL. Implica la determinazione del metodo di accesso ai dati corretto e dei parametri necessari per individuare e recuperare la risorsa a cui punta l'URI.
Un riferimento URI viene utilizzato per determinare l'utilizzo comune di un URI. Un riferimento URI può assumere la forma di un URI completo, una parte specifica di un URI completo o una stringa vuota. Se è presente un identificatore di frammento, identificherà una parte della risorsa a cui fa riferimento il resto dell'URI.
Un riferimento URI può essere un URI, ma può anche essere un riferimento relativo. Un URI è un riferimento relativo se il prefisso del riferimento URI non corrisponde alla sintassi di uno schema seguito dal suo separatore di due punti. Per determinare quali componenti sono presenti e se il riferimento è relativo, ciascuno dei cinque componenti URI viene analizzato per le sue sottoparti e la loro convalida.