Questo articolo descrive molto brevemente alcuni aspetti di come XHTML viene inviato dal server allo user agent (es. un browser), e di come gli user agent comuni gestiscono il markup che ricevono. Descrive questioni specifiche per l'implementazione, piuttosto che gli standard W3C.
Questi argomenti hanno una rilevanza su come dichiarare la codifica dei caratteri di un documento HTML o XHTML. Queste informazioni sono utili anche per spiegare perché alcuni aspetti dello stile CSS non appaiono come previsto, o variano da user agent a user agent.
Quando un server serve (cioè invia) un documento ad un browser, invia anche alcune informazioni aggiuntive con il documento, chiamate header HTTP.
Il campo Content-Type dell'header HTTP descrive che tipo di formato di dati si ha. Queste informazioni sono espresse utilizzando un label MIME media type. Ecco un esempio di una header HTTP per un file HTML usando il tipo MIME text/html
. Si noti che la voce Content-Type può anche esprimere la codifica dei caratteri del documento.
HTTP/1.1 200 OK
Date: Wed, 05 Nov 2003 10:46:04 GMT
Server: Apache/1.3.28 (Unix) PHP/4.2.3
Content-Location: CSS2-REC.en.html
Vary: negotiate,accept-language,accept-charset
TCN: choice
P3P: policyref=http://www.w3.org/2001/05/P3P/p3p.xml
Cache-Control: max-age=21600
Expires: Wed, 05 Nov 2003 16:46:04 GMT
Last-Modified: Tue, 12 May 1998 22:18:49 GMT
ETag: "3558cac9;36f99e2b"
Accept-Ranges: bytes
Content-Length: 10734
Connection: close
Content-Type: text/html; charset=utf-8
Content-Language: en
Il tipo MIME text/html
è la scelta standard per i file HTML. Un browser che riceva un file con questo tipo MIME presumerà che il markup segua la sintassi HTML e utilizzerà un parser HTML per interpretare il significato del markup.
Al contrario dell'HTML, XHTML è un linguaggio di markup basato su XML. La sintassi di XML è leggermente differente da quella di HTML e i processori XML sono meno indulgenti nel caso in cui siano commessi errori. Lo sviluppo di contenuti basati su XML pone molta enfasi su forma e validità degli stessi, e può essere prontamente integrato con tutti gli strumenti di elaborazione, i dati e gli automatismi disponibili all'interno del mondo dell'XML. Molti sviluppatori preferiscono usare XHTML a causa dei vantaggi che il rigore di questo linguaggio porta con sé per la modifica o l'elaborazione dei documenti.
Per inviare il markup XHTML ad un browser con un tipo MIME che dica che si tratta di XML, sarà necessario usare uno dei seguenti tipi MIME: application/xhtml+xml
, application/xml
oppure text/xml
. Il W3C raccomanda di servire XHTML come XML usando solo il primo di questi tipi MIME - ovvero application/xhtml+xml
.
Quando un browser legge l'XML utilizza un parser XML, non un parser HTML.
Sfortunatamente, fino adesso e inclusa la versione 8, Internet Explorer non supporta file serviti come XML, nonostante un buon numero di altri browser lo facciano. Per aggirare il fatto che non tutti i browser supportino il contenuto servito come XML, molti file XHTML sono serviti utilizzando il tipo MIME text/html
. In questo caso, lo
user agent leggerà il file come se fosse HTML e utilizzerà il parser HTML.
Poiché il browser considera l'XML come se fosse effettivamente HTML, bisognerà tenere il considerazione alcune differenze che intercorrono tra i due formati quando si scrive il proprio codice XHTML, per assicurarsi che le differenze tra XML e HTML non facciano commettere errori al broswer. Questo include diversi modi di dichiarare la codifica dei caratteri o la dichiarazione del linguaggio all'interno del documento.
L'Appendice C della specificazione sull'XHTML raccomanda un piccolo numero di linee guida sulla compatibilità da utilizzare nel servire XHTML come HTML. Queste linee guida sulla compatibilità sono particolarmente importanti per le versioni precedenti dei browser. Raccomandano, tra le altre cose, di lasciare uno spazio prima di '/>' alla fine di un tag vuoto (come img
, hr
o br
), di usare l'attributo HTML lang
come anche l'XML xml:lang
, di usare sempre sia l'attributo id sia name
per l'identificazione di frammenti, ecc.
Gli attuali browser mainstream possono mostrare un file HTML sia in modalità Standard che in modalità Quirks. Questo significa che alla visualizzazione del file vengono applicate regole diverse, una conforme ad un'interpretazione del comportamento atteso secondo gli standard W3C, l'altra alle aspettative basate sul comportamento non standard dei browser più vecchi.
Nelle ultime versioni dei principali browser, la modalità standard è attivata dalla presenza di un oggetto Dichiarazione DOCTYPE. La mancanza di un DOCTYPE può portare a un rendering diverso da browser a browser.
Le schermate seguenti illustrano alcune di queste differenze.
Clicca sulle immagini per vedere le pagine HTML effettive. Se le visualizzi in Internet Explorer vedrai lo stesso effetto.
Le due immagini mostrano due pagine con esattamente lo stesso markup e lo stesso stile CSS, ma una diversità. L'unica differenza tra la fonte dei due file è che quello a sinistra ha un DOCTYPE in alto, e l'altro no. Un file con un'appropriata dichiarazione DOCTYPE dovrebbe normalmente essere reso in modalità Standard dalle versioni recenti della maggior parte dei browser. Senza DOCTYPE, si ottiene la modalità Quirks.
Le differenze visive sopra illustrate derivano dalle seguenti differenze di implementazione in un browser come Internet Explorer:
In modalità Standard, l'impostazione della larghezza CSS applicata al div non assorbe le larghezze impostate per le impostazioni di padding dei bordi, mentre in modalità quirks lo fa, motivo per cui il box grande è più largo nell'immagine più a sinistra (Standard).
In modalità Quirks la tabella non ha ereditato l'impostazione della dimensione del carattere dall'elemento body, quindi il testo appare più grande.
L'uso originale del DOCTYPE è quello di indicare la definizione del linguaggio di marcatura. Di seguito è riportato il testo sorgente con la dichiarazione DOCTYPE in alto (evidenziata in corsivo
).<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8" />
<title>XHTML document</title>
<style type="text/css">
body { background: white; color: black; font-family: arial, sans-serif; font-size: 12px; }
p { font-size: 100%; }
h1 { font-size: 16px; }
div { margin: 20px; width: 170px; padding: 50px; border: 6px solid teal; }
table { border: 1px solid teal; }
</style>
</head>
<body>
<h1> File di test per Standard/Quirks</h1>
<div>
Un div con CSS width:170px, margin:20px, padding:50px e border:6px.
</div>
<p> <p>Testo in un elemento p.</p>
<table>
<tr><td>Testo in una tabella.</td></tr>
</table>
</body>
</html>.
I browser che commutano in questo modo tra modalità Standard e Quirks sono spesso chiamati a fare uno scambio di DOCTYPE.
Generalmente è una buona idea servire sempre le pagine in modalità Standard - cioè includere sempre una dichiarazione DOCTYPE.
C'è un aspetto dell'uso dei DOCTYPE che è di fondamentale importanza per le dichiarazioni di codifica dei caratteri e per risultati di stile prevedibili.
Poiché XHTML 1.0 è basato su XML, è possibile aggiungere una dichiarazione XML all'inizio del markup, anche se quest'ultimo è servito come HTML. In questo modo la parte superiore del file di cui sopra avrebbe questo aspetto (la dichiarazione XML è evidenziata in corsivo rosso):
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="en" lang="en" xmlns="http://www.w3.org/1999/xhtml"><
head>
...
Nei browser come Internet Explorer 7, Firefox, Safari, Opera, Google Chrome e altri, con o senza dichiarazione XML, una pagina servita con dichiarazione DOCTYPE sarà resa in modalità standard.
Con Internet Explorer 6, tuttavia, se prima della dichiarazione DOCTYPE compare qualsiasi altra cosa se non un marcatore di ordine di byte, la pagina viene resa in modalità Quirks.
Se gli utenti di Internet Explorer 6 costituiscono ancora una porzione significativa della vostra utenza, questo potrebbe essere un problema. Se volete assicurarvi che le vostre pagine siano visualizzate nello stesso modo di tutti gli altri browser conformi agli standard, dovete pensare attentamente a come affrontare la questione.
Ovviamente, se il vostro documento non contiene costrutti influenzati dalla differenza tra modalità Standard e Quirks, questo non è un problema. Se, d'altra parte, così non fosse, dovrete aggiungere delle soluzioni ai vostri CSS per superare le differenze, o omettere la dichiarazione XML.
Si noti che se si decidesse di omettere la dichiarazione XML si dovrebbe scegliere UTF-8 o UTF-16 come codifica per la pagina. (Vedi Dichiarare le codifiche dei caratteri in HTML per maggiori informazioni sull'impatto sulle dichiarazioni di codifica.)