[ This a draft Ask the W3C answer for review ]
A MIME type defines the type of file. Each file has a specific MIME type constructed of two parts: the main type and a subtype. The two parts are separated by a slash "/". It indicates the user agent receiving the document how to handle it and apply a particular treatment. It means also that you can attach a particular application to a particular MIME type in your browser.
The short answer is application/xhtml+xml
, as described by the XHTML Media-types Note. But the long answer adds some important modulations.
text/html
has been historically the mime-type associated with HTML, so why is there a new mime-type for XHTML? The first reason is that XHTML is not HTML: there are for instance some important syntax differences, the biggest one being that empty tags such as <br>
must not be closed in HTML whereas they must be (à la <br/>
) in XHTML.
Another good reason to use a new mime-type for XHTML is that it is an XML languages, which means that it has stricter rules checking and hence has better chances to avoid the infamous tag soup
that too many people have called HTML, and that browsers will be able to handle faster the resulting code.
application/xhtml+xml
.Indeed, and that's one of the biggest issue with the adoption of the new mime-type nowadays, especially since Internet Explorer doesn't recognize it (at least for any version up to 6.x on both Windows and Mac). Of course, this is a usual problem with adoption of new technologies and it usually gets better with time, but for the time being, there are ways out of this vicious circle:
text/html
(the backward compatibility mode defines some syntax tricks, that have been found as making an XHTML document understandable on most HTML browsers)text/html
or application/xhtml+xml
depending on the agent's capabilities so that you maintain backward compatibility for legacy browsers while giving the best to modern ones.The first technique makes your content understandable to the vast majority of web browsers, but doing so, you loose all the advantages of a different MIME-type: advertising XML conformance, distinguishing from tag soup, getting fast track rendering on modern browsers.
The second technique has probably the best coverage of existing browsers while keeping the new MIME-type for those able to understand it; the downside is that it can be quite tricky to implement on your site, depending on how much access you have to its settings.
Note that you can alternatively serve your XHTML (any version) as application/xml
(or text/xml
, but this MIME-type is harder to get right with regard to encoding), but I.E. will display it as source code instead of XHTML.
This depends on the web server you're using: if you're not the administrator of the web server where you want to use this content negotiation, point your web server administrator to this document and ask him to set it as needed for you.
If you're the administrator of the web server in question, you can have a look at the linked techniques for your web server, or even better, send us the techniques you know for it.
Let's try to summarize what we've just exposed:
(X)HTML version | Recommended MIME-type | Limitations in browser | Alternate MIME-types | Techniques |
---|---|---|---|---|
HTML 2.0,3.2,4.0,4.01 | text/html |
none, but this MIME-type has been abused very often as an umbrella for tag soup | N/A | N/A |
XHTML 1.0 | application/xhtml+xml |
Not recognized by Internet Explorer 6.x and previous versions |
|
|
XHTML 1.1, XHTML Basic, XHTML profiles | application/xhtml+xml |
Not recognized by Internet Explorer 6.x and previous versions |
|
serving as text/xml for I.E. |