DTD – 2

XMLHTTP è un set di API che possono essere usate da JavaScript, JScript, VBScript e altri linguaggi di scripting dei browser per trasferire XML o altri dati da e verso un web server tramite HTTP. Il più grande vantaggio di XMLHTTP è la possibilità di aggiornare dinamicamente una pagina web senza ricaricare l’intera pagina. Viene usato da alcuni siti web per velocizzare applicazioni dinamiche.
Oltre a XML, XMLHTTP può essere usato per prendere dati in altri formati, come JSON o anche testo semplice.
XMLHttpRequest (abbreviato: XHR) è un elemento fondamentale della tecnica di sviluppo web conosciuta con l’acronimo AJAX, ed è utilizzato in molti siti web per implementare applicazioni fruibili via browser dinamiche ed interattive. Una delle prime applicazioni ad utilizzare questo componente è stato il servizio di webmail di Google Gmail, a cui sono seguiti Google Suggest, Meebo, Virtual Earth di MSN e MapQuest.

Metodo
Descrizione

abort()
Cancella la richiesta in atto.

getAllResponseHeaders()
Restituisce sotto forma di stringa tutti gli header HTTP ricevuti dal server

getResponseHeader( nome_header )
Restituisce il valore dell’header HTTP specificato

open( metodo, URL )
open( metodo, URL, async )
open( metodo, URL, async, userName )
open( metodo, URL, async, userName, password )
Specifica il metodo, l’URL e altri parametri opzionali per la richiesta.

Il parametro metodo può assumere valore di “GET”, “POST”, oppure “PUT” (“GET” è utilizzato quando si richiedono dati, mentre “POST” è utilizzato per inviare dati, specialmente se la lunghezza dei dati da trasmettere è maggiore di 512 byte).

Il parametro URL può essere sia relativo che assoluto.

Il parametro “async” specifica se la richiesta deve essere gestita in modo asincrono oppure no – “true” significa che lo script può proseguire l’elaborazione senza aspettare la risposta dopo il metodo send(), mentre “false” significa che lo script
è costretto ad aspettare una risposta dal server prima di continuare.

send( content )
Invia la richiesta

setRequestHeader( chiave, valore)
Aggiunge la coppia chiave/valore alla richiesta da inviare.

Attributo
Descrizione

onreadystatechange
Gestore dell’evento lanciato ad ogni cambiamento di stato.

readyState
Restituisce lo stato corrente dell’istanza di XMLHttpRequest:
0 = non inizializzato, 1 = aperto, 2 = richiesta inviata, 3 = risposta in ricezione e 4 = risposta ricevuta.

responseText
Restituisce la risposta del server in formato stringa

responseXML
Restituisce la risposta del server come oggetto Document, che potrà essere esaminato secondo le specifiche DOM del W3C.

status
Restituisce il codice HTTP restituito dal server (per esempio 404 per “Not Found” e 200 per “OK”).

statusText
Restituisce lo status in forma di stringa descrittiva (per esempio. “Not Found” oppure “OK”).

Storia
L’oggetto venne originariamente inventato da Microsoft, usato da Internet Explorer 5.0 come oggetto ActiveX, accessibile via JavaScript, VBScript, o qualsiasi altro linguaggio supportato dal browser.
Gli sviluppatori di Mozilla implementarono poi una versione compatibile in Mozilla 1.0. Successivamente è stato supportato anche da Apple con Safari 1.2 e da Opera Software con Opera 8.0.

La maggior parte delle pagine ben progettate che usando XMLHTTP sono destinate a nascondere le implementazioni dell’oggetto XMLHTTP incapsulando la sua invocazione con un JavaScript.
Funzionalità simili sono incluse in DOM Livello 3 “Load and Save”, già raccomandazione del W3C. A questo indirizzo è possibile trovare le informazioni di compatibilità con tutti i principali browser.

Al momento è implementato in maniera esauriente in tutti i principali browser. (Safari, Chrome, FireFox, Opera)

Problemi noti
La cache di Microsoft Internet Explorer

Il browser di casa Microsoft implementa una cache per le richieste GET.
Gli sviluppatori che non sono abituati al caching non si aspettano che le richieste GET vengano memorizzate, oppure che essa venga ignorata come per il tasto di refresh.
In alcune situazioni, non riuscire ad evitare la cache genera problemi al punto di poter essere considerato un bug. Una soluzione a questo è di utilizzare il metodo POST nelle request, che non viene mai memorizzato in cache.

Ci sono diversi modi per cercare di aggirare il problema. Il primo consiste nell’impostare nell’header per la voce “Expires” una data già passata: ciò farà evitare il caching delle risposte. Un esempio in PHP:

header( “Expires: Mon, 26 Jul 1997 05:00:00 GMT” ); // disable IE caching
header( “Last-Modified: ” . gmdate( “D, d M Y H:i:s” ) . ” GMT” );
header( “Cache-Control: no-cache, must-revalidate” );
header( “Pragma: no-cache” );
header( “Expires: -1”, false );
Invece nelle Java Servlet:
response.setHeader( “Pragma”, “no-cache” );
response.addHeader( “Cache-Control”, “must-revalidate” );
response.addHeader( “Cache-Control”, “no-cache” );
response.addHeader( “Cache-Control”, “no-store” );
response.setDateHeader(“Expires”, 0);

In alternativa è possibile costringere l’oggetto XMLHttpRequest ad effettuare la richiesta nel seguente modo:
req.open( “GET”, “xmlprovider.php” );
req.setRequestHeader( “If-Modified-Since”, “Sat, 1 Jan 2000 00:00:00 GMT” );
req.send( null );

Un ultimo metodo è di aggiungere una stringa casuale alla fine dell’URL nella richiesta HTTP, facendo credere quindi al browser di richiedere una pagina diversa:
req.open( “GET”, “xmlprovider.php?sid=” + Math.random());

È importante notare che le tecniche mostrate dovrebbero essere utilizzate solo quando il caching risulta essere inappropriato e da evitare.
Se questi metodi fossero usati indiscriminatamente, l’applicazione potrebbe risentirne in termini di prestazioni.

Problemi con caratteri non ASCII
Se la risposta del server non è in formato XML, il responseText potrebbe non funzionare correttamente mentre si utilizzano i caratteri non-ASCII, per esempio le lettere accentate come «è».
Mentre Firefox gestisce correttamente questi dati e visualizza il carattere incriminato, Internet Explorer lo gestirà correttamente alla prima richiesta (anche se potrebbero esserci dei problemi).
Se la richiesta viene ripetuta ed il browser di Microsoft utilizza un risultato memorizzato in cache, allora genererà un errore JavaScript.
L’utilizzo di risposte XML e del metodo responseXML permette di far funzionare tutto correttamente con qualsiasi carattere UTF-8.
In alternativa il problema può essere risolto settando il charset adeguato nella pagina a cui viene effettuata la richiesta, in modo che il testo di risposta sia prodotto nella giusta codifica fin dall’inizio.


Nota. A partire dalla versione del 24 Dicembre di HTML 4.01, Il Gruppo di lavoro su HTML rimanda alla seguente linea programmatica:
•Qualsiasi modifica alle future DTD di HTML 4 non invaliderà i documenti che sono conformi alle DTD delle presenti specifiche. Il Gruppo di lavoro su HTML si riserva il diritto di correggere bachi conosciuti.
•Software conformi alle DTD delle presenti specifiche possono ignorare caratteristiche delle future DTD di HTML 4 che essi non riconoscono.

Ciò significa che in una dichiarazione del tipo di documento, gli autori possono usare in tutta sicurezza un identificatore di sistema che rimanda all’ultima versione di una DTD di HTML 4.
Gli autori possono anche scegliere di usare un identificatore di sistema che si riferisce ad una specifica (datata) versione di una DTD di HTML 4, quando è richiesta la conformità a quella particolare DTD.
Il W3C farà ogni sforzo per conservare i documenti d’archivio indefinitamente disponibili presso i loro indirizzi originali nella loro forma originale.

L’elemento HTML

Definizioni di attributo
version = cdata [CN]Disapprovato. Il valore di questo attributo specifica quale versione di DTD HTML governa il documento corrente.
Questo attributo è stato disapprovato perché è ridondante rispetto alle informazioni sulla versione fornite dalla dichiarazione del tipo di documento.

Attributi definiti altrove
• lang (informazioni sulla lingua), dir (direzione del testo)

Dopo la dichiarazione del tipo di documento, la parte rimanente di un documento HTML è contenuta all’interno dell’elemento HTML. Pertanto un tipico documento HTML ha questa struttura:

…L’intestazione, il corpo, ecc. vanno qui…

L’intestazione del documento

L’elemento HEAD

Marcatore iniziale: facoltativo, marcatore finale: facoltativo

Definizioni di attributo
profile = uri [CT]Questo attributo specifica la locazione di uno o più profili di metadati, separati da spazio bianco.
In vista di future estensioni, i programmi utente dovrebbero considerare il valore come un elenco anche se queste specifiche considerano solo il primo URI come significativi.

Attributi definiti altrove
• lang (informazioni sulla lingua), dir (direzione del testo)

L’elemento HEAD contiene informazioni circa il documento corrente, quali il suo titolo, le parole chiave che possono essere utili ai motori di ricerca, ed altri dati che non sono considerati come contenuto del documento.
I programmi utente generalmente non riproducono gli elementi che appaiono in HEAD come contenuto. Essi possono, tuttavia, rendere disponibili agli utenti attraverso altri meccanismi le informazioni presenti in HEAD.

L’elemento TITLE

Attributi definiti altrove
• lang (informazioni sulla lingua), dir (direzione del testo)

Ogni documento HTML deve avere un elemento TITLE nella sezione HEAD.

Gli autori dovrebbero usare l’elemento TITLE per identificare i contenuti di un documento. Poiché gli utenti consultano spesso documenti fuori contesto, gli autori dovrebbero fornire titoli ricchi di informazioni contestuali.
Per ragioni di accessibilità, i programmi utente devono sempre rendere il contenuto dell’elemento TITLE disponibile agli utenti (con l’inclusione degli elementi TITLE che sono presenti nei frame).
Il meccanismo per ottenere ciò dipende dal tipo di programma utente (es., come una didascalia, come parlato).

I titoli possono contenere entità carattere (per i caratteri accentati, i caratteri speciali, ecc.), ma non possono contenere altro codice di marcatura (compresi i commenti). Ecco qui un esempio tipico di titolo di documento:

Uno studio sulla dinamica della popolazione … altri elementi d’intestazione… … corpo del documento…

Definizioni di attributo
title = text [CS]Questo attributo offre informazioni per la consultazione relative all’elemento per il quale è impostato.
A differenza dell’elemento TITLE, che offre informazioni su un intero documento e può apparire una volta soltanto, l’attributo title può chiosare un qualsiasi numero di elementi.
Si consulti la definizione di un elemento per verificare se esso supporta questo attributo.

I valori dell’attributo title possono essere rappresentati dai programmi utente in una varietà di modi. Per esempio, i browser visuali mostrano frequentemente il titolo come un “consiglio utile” (un breve messaggio che appare
quando il dispositivo di puntamento si ferma su un oggetto). I programmi utente di tipo acustico possono, in un contesto analogo, dire a voce l’informazione presente nel title.
Ad esempio, impostare tale attributo in un collegamento consente ai programmi utente (visuali e non visuali) di dire agli utenti qualcosa sulla natura della risorsa collegata:
…del testo…
Ecco una foto di
me in immersione con l’autorespiratore l’estate scorsa
…dell’altro testo…

L’attributo title ha una funzione aggiuntiva quando usato insieme con l’elemento LINK per designare un foglio di stile esterno. Si consulti per dettagli la sezione su collegamenti e fogli di stile.

Nota. Per migliorare la qualità della sintesi vocale nei casi trattati in modo insoddisfacente per mezzo delle tecniche standard, future versioni dell’HTML potranno includere un attributo per la codifica di informazioni fonematiche e prosodiche.