Lo scopo fondamentale degli URL è identificare in modo univoco una risorsa esistente e raggiungibile attraverso strumenti di comunicazione basati su internet.
Questo documento può essere considerato una introduzione per principianti sulla formazione e l'utilizzo degli URL.
Autore | Giacomo Mengucci |
---|---|
Licenza | FDL |
Ultimo Aggiornamento | 08/04/2007 |
Per capire l'importanza degli URL è necessario conoscere a grandi linee come avviene la comunicazione fra le varie macchine collegate in internet.
Una macchina collegata sulla rete globale internet prende il
nome di host.
Gli host collegati sono milioni, ciascuno dei quali può mettere
a disposizione delle risorse.
Per risorsa si può intendere qualsiasi file - documento, ma
anche qualsiasi servizio fornito da appositi programmi (posta
elettronica, gruppi di discussione, trasferimento file
ecc.).
Ci sono tre domande fondamentali a cui rispondere per capire come funziona la comunicazione via internet:
Identificazione univoca degli host
Ogni host collegato sulla rete globale è identificato univocamente da un numero che è detto indirizzo IP; non è lo scopo di questo scritto spiegare perché l'identificazione è possibile grazie all' indirizzo IP, ma fin da ora si può affermare che una parte dell'URL è in concreto "tradotta" in tale indirizzo numerico.
La lingua con cui gli host comunicano fra loro
Gli host che "parlano" fra loro si capiscono grazie ad una
serie di protocolli di comunicazione, cioè grazie ad
un complesso di regole standard che definiscono una lingua
comune.
I protocolli di comunicazione sono molteplici e differiscono
l'uno dall'altro a seconda delle risorse che si vogliono
acquisire su internet.
Ad esempio, se lo scopo della comunicazione è la così detta
navigazione, le risorse acquisite sono principalmente documenti
ipertestuali e il protocollo di comunicazione è il
protocollo http.
I documenti ipertestuali non sono altro che file scritti in
appositi linguaggi di marcatura, quali l'
HTML o
l'XHTML.
Una parte dell'url serve ad indicare quale sia il protocollo di
comunicazione da utilizzare. (Vedi la
sezione[sub:protocollo-comunicazione])
Le modalità di comunicazione fra gli host: il paradigma client - server
Il meccanismo generale di comunicazione è molto semplice:
c'è un host che elabora e spedisce una richiesta e c'è un host
che elabora e spedisce una risposta alla richiesta.
L'host che elabora e spedisce la richiesta è detto
client, l'host che elabora e spedisce una risposta è
detto server.
Per essere più precisi le richieste sono elaborate da un
programma client, che riceverà anche le risposte, mentre le
risposte sono elaborate da un programma server, che riceverà
anche le richieste.
Nell'attività di navigazione, il programma client è detto
browser, il programma server è detto server
http o anche server WEB.
La sintassi di alto livello di un URL è composta da due parti separate dal carattere :
scheme:scheme_specific_part
Queste due parti si formano in modo diverso a seconda della risorsa a cui si vuol far riferimento con l'URL.
In questo scritto tratteremo in modo approfondito la
formazione degli URL utilizzati per la navigazione WEB, mentre
accenneremo alla formazione degli URL per l'acquisizione di
altri servizi.
I concetti e le regole qui apprese e relative alla formazione
degli URL, saranno preziosi anche per chi si voglia cimentare
nella realizzazione dei documenti ipertestuali attraverso i
linguaggi di
marcatura HTML o XHTML.
La parte chiamata scheme identifica il protocollo di comunicazione utilizzato per reperire una risorsa specifica e quindi indirettamente individua la tipologia di risorsa a cui si vuol far riferimento con l'URL.
Il protocollo utilizzato per la navigazine WEB e quindi per i documenti ipertestuali, è il protocollo http.
Lo scheme_specific_part degli URL http ha due funzioni fondamentali: la prima è quella di identificare l'host a cui inviare la richiesta; la seconda è quella di individuare in modo specifico la risorsa che il server dovrebbe restituire con la sua risposta.
La parte scheme_specific_part di un URL http, può essere ulteriormente disaggregata in questo modo:
//autorità/percorso
In questa sezione sarà approfondito il significato di //autorità, come parte in cui inserire un nome di dominio.
http://www.jacknake.org
Il nome di dominio, o anche nodo, identifica l'host su cui è avviato, ed è in ascolto, il server http, che risponderà alle nostre richieste.
Il nome di dominio è formato da almeno due parti ciascuna separata da un punto (jacknake.org); le parti che formano il nome di dominio possono essere anche più di due, ma comunque l'ultima rappresenta un codice, normalmente di due o tre lettere, che identifica, o la regione geografica in cui è situato il server (.it per Italia, .de per Germania .fr per Francia ecc.), oppure il tipo di sito a cui ci connettiamo (.com per sito commerciale, .org per sito di organizzazioni non governative senza scopo di lucro, .edu per sito di università ecc.).
In realtà dietro al nome di dominio si cela un indirizzo IP; non è lo scopo di questo scritto spiegare come i nomi di dominio vengono risolti in indirizzi IP.
La seconda importante funzione dello scheme_specific_part è quella di indicare la risorsa da acquisire, in particolare questo compito è svolto dalla parte /percorso
http://www.jacknake.org/index.html
Il file da acquisire è normalmente un documento ipertestuale di tipo HTML che sarà spedito dal server in risposta alla richiesta ricevuta; in particolare il file ricevuto sarà elaborato dal programma che ha fatto la richiesta, il quale potrà, ad esempio, visualizzarlo all'interno di una finestra, oppure avviare una procedura di download sulla nostra macchina.
Il tipo di elaborazione eseguita sul file ricevuto dipende dal programma che fa la richiesta e dal tipo di file richiesto; normalmente il programma che fa la richiesta è un browser, il file richiesto è di tipo HTML e quindi l'elaborazione consiste nella visualizzazione dei contenuti del file secondo i significati propri dei vari marcatori HTML.
L' Host su cui gira il server è, come già detto, un
computer che, con tutta probabilità, avrà centinaia di
directory, all'interno delle quali ci potranno
essere migliaia di file.
La questione importante da capire è come faccia il server a
conoscere in quale directory si trovi il file che gli è stato
chiesto dal client.
A questo scopo è necessaria una digressione
sull'organizzazione gerarchica ad albero rovesciato delle
directory all'interno di un filesystem.
Il filesystem può essere considerato come un modo di
organizzare e gestire logicamente i file e le cartelle in un
qualsiasi supporto di memorizzazione.
La maggior parte dei filesystem hanno una directory radice da cui tutto parte, nel senso che è da questo punto che vengono create ulteriori directory in cui memorizzare i file.
La directory radice, in quanto tale, può contenere file o altre directory; ciascuna delle directory contenute in quella radice possono contenere altre directory o altri file e così via fino a che vi sia capacità fisica di memorizzazione sul supporto utilizzato.
Il modo di indicare la directory radice varia da un
sistema operativo ad un altro; in una console Linux, la
directory radice è rappresentata con uno slash /.
Per individuare un file memorizzato su un disco, quindi, si
dovrà indicare tutto il percorso da seguire partendo dalla
directory radice, fino ad arrivare alla directory in cui si
trova il file voluto.
Se il file index.html
fosse nella directory radice, il percorso o PATH sarebbe
semplicemente /index.html; se invece lo stesso
file fosse all'interno della directory mysite, a sua volta contenuta nella
directory radice, il percorso sarebbe /mysite/index.html.
Il primo slash indica la directory radice, il secondo slash
ci dice che stiamo dentro una directory, il cui nome è la
sequenza di caratteri immediatamente precedente.
Se scrivessimo un percorso del tipo /mysite/mirror/index.html, il nostro file sarebbe posizionato nella directory mirror, contenuta all'interno della directory mysite, che a sua volta è posizionata all'interno della directory radice.
Un server http è impostato per far riferimento ad una
propria directory radice.
La directory radice a cui si riferisce il server non
necessariamente corrisponde alla directory radice del
sistema su cui quel server è avviato; in ogni caso, il
server permetterà l'accesso dall'esterno a partire dalla
sua directory radice.
l'URL http://www.jacknake.org/index.html, quindi, identifica una risorsa sotto forma di file HTML di nome index.html, che si trova nella directory radice del server che gira sulla macchina identificata da www.jacknake.org.
Il file risorsa può essere memorizzato in una qualsiasi directory a partire dalla radice del server.
Se fosse indicato un file, oppure una directory, che non esiste nel percorso specificato, il server WEB risponderà con l'errore n. 404 Not Found.
Qualsiasi browser per la navigazione in internet ha una
barra degli indirizzi in cui scrivere l'URL del sito che si
intende visitare.
A tal propostio si è sicuramente notato che in tale barra è
sufficiente scrivere l'URL indicando solamente
l'identificativo della macchina host su cui gira il
server.
L'omissione del protocolo di comunicazione da utilizzare non provoca la generazione di un errore da parte del server, in quanto i programmi client come i browser sono configurati per utilizzare il protocollo http in modo predefinito, quando la sequenza scritta nella barra degli indirizzi appare essere un URL destinato ad un server WEB.
La mancata indicazione espressa di una risorsa da acquisire, allo stesso modo, non genera un errore, in quanto il server WEB è normalmente configurato per restituire un file predefinito, qualora non sia in grado di determinare dall'URL quale file restituire.
Gli URL che si sono visti finora, quando referenziano in
modo esplicito una risorsa, indicano sempre un nome di un
file.
Ciò non è obbligatorio, in quanto con l'URL si può indicare
come risorsa da reperire anche una directory.
La risposta del server è diversa a seconda di come esso
è stato configurato.
Infatti l'amministratore del sistema può decidere di negare
l'accesso a determinate directory, o può consentirlo solo a
determinati utenti; in tali casi, se l'utente non è
autorizzato, la risposta del server sarà l'errore n.
403 Forbidden.
Un'altro tipo di configurazione del server implica l'associazione di un file predefinito ad una o più directory, cosicchè quando il client fa riferimento ad una di quelle directory otterà in risposta quello specifico file.
L'ultima ipotesi di configurazione prevede che il server invii come risposta la lista dei file e delle directory contenuti nella directory referenziata; normalmente gli elementi di questa lista sono visualizzati dal browser in modo attivo sotto forma di collegamento, in modo che l'utente possa accedervi direttamente, ad esempio cliccando su uno dei termini della lista.
Per mezzo di un URL http si possono acquisire risorse diverse dai documenti ipertestuali: immagini, audio, video, programmi eseguibili, documenti in altri formati, sono tutte risorse a cui si può accedere grazie al protocollo http.
Dietro a ciascuna di queste risorse vi è, naturalmente, un file, che può essere referenziato con un URL allo stesso modo con cui si referenziano i file di tipo HTML.
Conoscere il tipo di file che si stà acquisendo non è tanto importante per la costruzione dell'URL, ma piuttosto per capire come il browser reagirà una volta ricevuta la risorsa dal server.
Quando il browser non è in grado di elaborare
direttamente il file ricevuto dal server, il suo
comportamento dipende da come è stato configurato.
Esso può essere configurato per avviare in automatico un
apposito programma esterno, per mezzo del quale elaborare
il file acquisito via internet; in tal caso, una volta
conclusa l'acquisizione, il browser lancia uno specifico
programma, gli passa il file acquisito e da questo momento
l'elaborazione va sotto il controllo di questo programma
esterno.
La configurazione predefinita dei browser non è quella di avviare un programma esterno, ma piuttosto quella di salvare il file sul disco locale, normalmente previa richiesta all'utente di indicare in quale directory tale salvataggio deve essere effettuato.
Fino ad ora è stato affermato che lo scheme_specific_part
del protocollo http
si risolve nello schema //autorità/percorso.
La parte autorità è stata genericamente indicata come parte
contenente il nome di
dominio, cioè l'dentificativo univoco dell'host su cui gira
il server che risponde alle richieste del client.
La parte //atuorità è in realtà molto più ricca e può essere ulteriormente specificata secondo lo schema che segue:
//[utente[:parola d'ordine]@]nodo[:porta]
Le parti racchiuse all'interno delle parentesi quadre sono
facoltative; se esse vengono omesse saranno utilizzate le
impostazioni predefinite del server o del client.
L'unica parte necessaria è il nodo, che, come si può intuire,
contiene il nome univoco dell'host da raggiungere.
La parte utente è il nome di un utente registrato nel server, a cui è stato autorizzato l'accesso a determinate directory vietate ad altri utenti; normalmente, anche se non necessariamente, ad un utente registrato è collegata una parola di accesso riservata, necessaria per essere autorizzati a consultare il contenuto di specifiche directory; la parte parola d'ordine contiene proprio tale parola d'accesso.
A livello sintattico si può notare che le parti utente e parola d'ordine sono separate dalla parte nodo da un carattere chiocciola @; se all'utente registrato è collegata anche una parola d'accesso, il nome del primo è separato dalla seconda dal carattere :.
L'ultima parte da considerare, probabilmente anche la più difficile da capire per un principiante, è la porta.
Il concetto di porta ha a che fare con la struttura client - server che sta alla base della comunicazione via internet; tale comunicazione è finalizzata al reperimento di risorse che possono essere molto diverse fra loro; la diversità delle risorse implica anche la diversità dei vari programmi client e dei vari programmi server con cui la comunicazione viene gestita.
Su uno stesso host, pertanto, possono girare contemporaneamente più server, ciascuno dei quali gestisce un particolare tipo di comunicazione; tali server comunicano con i rispettivi client attraverso uno specifico canale di comunicazione identificato da un numero.
Il numero identificativo del canale di comunicazione è detto porta e di solito esso è definito in modo standard a seconda del tipo di server che lo utilizza; ad esempio, i server http di solito utilizzano la porta n. 80 per comunicare con i vari client.
Il fatto che ci siano delle porte standard, non implica che i server devono per forza utilizzarle, essi possono esigere che la comunicazione avvenga su una porta non standard; se così avviene, il client che vuole comunicare con quel server deve sapere quale sia il canale di comunicazione da utilizzare; uno dei modi per dire al client quale sia il canale che il server utilizza è quello di indicarlo nell'url in corrispondenza della parte porta.
Le risorse reperibili su internet e i connessi servizi di gestione non si limitano alle risorse ipertestuali e al protocollo http.
Lo scopo del servizio FTP è quello di gestire l'attività di trasferimento di uno o più file da un host ad un altro della rete internet; con ciò non si vuole affermare che il trasferimento dei file può avvenire solo tramite questo tipo di servizio, ma piuttosto che il servizio FTP nasce appositamente per rispondere a tale esigenza.
Quando non vi sono esigenze di navigazione, ma si ha solo la necessità di trasferire file di qualsiasi tipo da un punto ad un altro della rete, il servizio FTP può essere una risposta a questo bisogno.
Il servizio FTP è organizzato secondo la logica client - server, per cui di norma esiste un host su cui gira un server ftp ed esisto uno o più host su cui girano i client ftp che chiedono al server di trasferire determinati file.
I file sul host server sono organizzati gerarchicamente in directory a partire da una radice definita dal server; l'accesso a queste directory può essere anonimo, oppure può richiedere una autenticazione, cioè la fornitura di un nome utente e di una password.
Le operazioni di norma consentite sono il download, cioè il trasferimento dal server al client, o l'upload, cioè il trasferimento dal client al server; l'accesso può essere limitato sia in relazione al tipo di operazioni che possono essere eseguite, sia in relazione alle cartelle su cui si può operare.
La formazione degli URL collegati al protocollo ftp è molto simile alla formazione degli URL per il protocollo http, in quanto le risorse da acquisire sono file organizzati in modo gerarchico.
ftp://[utente[:parola d'ordine]@]nodo[:porta]/percorso
Le parentesi quadre indicano le parti facoltative.
L'unica differenza sostanziale è relativa alla parte
scheme dell'url: al posto
del protocollo http, si indica il protocollo ftp.
Nella parte autorità dello scheme_specific_part, come già visto
per il protocollo http, è necessario indicare un nodo e possono essere indicati un utente, una parola d'ordine e una porta intesa come canale di comunicazione da
utilizzare.
Il percorso non è altro che
l'indicazione del percorso da seguire partendo dalla
directory radice fino ad arrivare alla risorsa specifica da
acquisire.
I documenti ipertestuali sono creati per mezzo del linguaggio HTML; la funzione di tale linguaggio è quella di strutturare i contenuti del documento; il documento viene suddiviso logicamente in elementi, ognuno dei quali ha una funzione o un ruolo rispetto alla struttura dei contenuti che l'autore ha progettato.
Suddividere gli argomenti trattati nel testo in capitoli, sezioni, sottosezioni ecc., suddividere il testo in paragrafi, individuare in quali parti inserire immagini o altri oggetti multimediali, individuare quali parti del testo sono attive attraverso collegamenti ad altri documenti ipertestuali, collegarsi a un file CSS che definisce gli stili di presentazione dei vari elementi del documento, impostare delle relazioni logiche fra i vari documenti ipertestuali, sono tutte attività che hanno a che fare con la strutturazione logica dei contenuti di un documento ipertestuale e quindi sono realizzabili attraverso il linguaggio HTML.
Del resto il documento viene definito ipertestuale proprio perchè mette in relazione fra loro una pluralità di risorse: collegamenti fra documenti ipertestuali diversi, collegamenti con delle immagini o altri elementi multimediali, collegamenti a file CSS, collegamenti a file che contengono codice javascript ed altro ancora.
Tutte queste risorse collegate, come probabilmente si è già intuito, sono contenute in file distinti da quello che contiene il documento principale e quindi in qualche modo a tali risorse collegate bisogna fare riferimento dal documento principale; lo strumento con cui vengono effettuati questi riferimenti sono gli URL.
Per creare la struttura logica dei contenuti di un documento ipertestuale, il linguaggio HTML mette a disposizione i così detti marcatori; se, per esempio, si vuole che una parte del testo sia attiva e rappresenti un collegamento ad un altro documento ipertestuale, quella parte di testo sarà inclusa all'interno della coppia di marcatori <a> e </a>, mentre se si vuole che in un determinato punto del documento sia inserita una immagine, si utilizza il marcatore <img>.
Ogni elemento della struttura può avere delle caratteristiche o proprietà che vengono definite attraverso gli attributi dei marcatori; ad esempio uno degli attributi del marcatore <a> è href, che contiene l'URL del documento ipertestuale a cui collegarsi, mentre uno degli attributi del marcatore <img> è src, che contiene l'URL del file immagine da rappresentare nel documento ipertestuale.
La combinazione fra marcatori ed attributi avviene secondo la seguente sintassi generica:
<nome-marcatore nome-attributo="valore-attributo">
<p>
Per ulteriori
informazioni sul linguaggio HTML si può consultare
<a
href="http://a2.pluto.it/a2448.htm">
Appunti di informatica libera
</a>
</p>
Gli attributi di uno stesso marcatore possono essere, e normalmente sono, anche più di uno; in tal caso le coppie nome-attrbuto="valore-attributo" sono poste l'una di seguito all'altra separate da uno spazio.
Il sorgente HTML, che rappresenta un determinato documento ipertestuale, è contenuto in un file memorizzato in una delle directory dell'host su cui gira il server.
Quando dall'interno di un sorgente HTML ci si riferisce ad un diverso file, grazie all'url si può specificare dove questo file può essere acquisito.
Se il file a cui riferirsi si trova in un altro host rispetto a quello in cui è memorizzato il sorgente HTML, l'URL si forma nei modo visti nelle sezioni precedenti.
Quando il file a cui riferirsi si trova sullo stesso host del sorgente HTML, l'URL va formato indicando il percorso del file, in relazione alla struttura gerarchica del filesystem di questo specifico host.
Il modo più semplice, ma anche il più rigido, è quello di indicare l'intero percorso del file, cioè di partire dalla directory radice, specificare tutte le altre directory da attraversare, fino ad arrivare alla directory in cui è contenuto il file voluto.
L'url formato indicando l'intero percorso del file è definito come URL con percorso assoluto.
La formazione di URL con percorso assoluto ha una alternativa più flessibile: se il file a cui collegarsi si trova sulla stessa directory in cui è memorizzato il sorgente HTML, allora nell'url è sufficiente specificare il solo nome del file, non anche l'intero percorso a partire dalla directory radice; il server cercherà il file automaticamente nella stessa directory del sorgente HTML.
L'url formato in questo modo è definito URL con percorso relativo.
Gli URL con percorso relativo si fondano sul concetto di directory di base, cioè la directory su cui il sever cercherà in automatico il file quando non è specificato espressamente alcun percorso.
La directory di base, se non diversamente stabilito, è la directory in cui è memorizzato il sorgente HTML che contiene l'URL.
La directory di base è il punto di partenza per la formazione di URL con percorso relativo, con i quali si possono referenziare anche i file che si trovano in una directory diversa da quella di base.
La sequenza ../ dice al
server di scendere di un livello gerarchico.
In realtà, siccome la struttura
gerarchica è rovesciata, sarebbe più corretto dire che si
sta salendo di un livello gerarchico, ma rispetto al modo in
cui viene scritto un percorso assoluto, la sequenza
../ fa riferimento alla
directory che immediatamente precede la directory di
base.
Con più sequenze di ../, si possono indicare directory che si trovano ad un qualsiasi livello gerarchico precedente rispetto alla directory di base.
Gli URL con percorso relativo possono far riferimento anche a directory che si trovano ad un livello gerarchico successivo rispetto alla directory di base
Se il primo carattere del percorso non è uno slash /, automaticamente il server lo considera come un percorso relativo; la prima directory indicata in tal tipo di percorso è intesa come una directory situata nella directory di base.
Con gli URL relativi è anche possibile scendere di un livello gerarchico, per poi risalire in una directory parallela a quella di base.
Gli URL devono essere formati, cioè scritti, attraverso uno specifico insieme di caratteri che è lo US ASCII (composto da 127 caratteri).
Se si ha la necessità di utilizzare un carattere che non fa parte dell'insieme US ASCII, ma è parte dei primi 256 caratteri di uno specifico super insieme come UTF-8, si deve utilizzare una speciale codifica formata da un iniziale carattere di % seguito da due cifre esadecimali.
Le due cifre esadecimale rappresentano l'identificativo del
carattere nel super insieme utilizzato: %20 rappresenta il carattere di
spaziatura, %2f lo slash,
%d8 lo zero barrato ø.
Di norma i primi 256 caratteri sono gli stessi qualsiasi sia il
super set di US ASCII che si utilizza.
I sistemi operativi hanno specifici programmi per la gestione e la visualizzazione del set di caratteri; tali programmi possono essere utilizzati per conoscere i vari codici di identificazione e a quali caratteri tali codici corrispondono.
La speciale codifica deve essere utilizzata anche quando si voglio utilizzare, per formare un URL, i così detti caratteri riservati; i caratteri riservati sono quelli che hanno uno speciale significato nella sintassi stessa di un URL.
Descrizione | Simbolo | Codice |
---|---|---|
Punto e virgola | ; | %3b |
Barra | / | %2f |
Punto di domanda | ? | %3f |
Due punti | : | %3a |
Chiocciola | @ | %40 |
Uguale | = | %3d |
e Commerciale | & | %26 |
In linea di massima si può affermare che è buona regola utilizzare la speciale codifica ogni volta che per formare un URL si vogliono utilizzare caratteri che non sono nè lettere nè numeri; ciò per evitare di utilizzare caratteri che possono confondere i programmi che, di volta in volta, sono deputati ad interpretare gli URL.