我來從HTML的歷史談談他們3者的區別。html
在HTML的早期發展中,W3C成立以前,不少標準的制定都是在瀏覽器的開發者們互相討論的狀況下完成的,好比HTML 2.0, 3.2直到4.0, 4.01,這些標準大部分都是所謂的retro-spec,即先有實現後有標準。在這種狀況下,HTML標準不是很規範,瀏覽器也對HTML頁面中的錯誤至關寬容。這反過來又致使了HTML做者寫出了大量的含有錯誤的HTML頁面。聽說,時至今日web上99%的頁面都含有HTML錯誤。web
W3C隨後意識到了這個問題,並認爲這是互聯網的一個基礎性問題,應該加以解決。爲了規範HTML,W3C結合XML制定了XHTML 1.0標準,這個標準沒有增長任何新的tag,只是按照XML的要求來規範HTML,並定義了一個新的MIME type,application/xhtml+xml。W3C的初衷是對這個MIME type瀏覽器要實行強錯誤檢查,既若是頁面有HTML錯誤,就要顯示錯誤信息。可是因爲已有的web頁面中已經有了大量的錯誤,不少開發者拒絕使用新的MIME type。W3C不得已,在XHTML 1.0的標準以後加了一個附錄C,容許開發者使用XHTML語法來寫頁面,同時使用舊的MIME type,application/html,來分發頁面。這個舊的MIME type不會觸發瀏覽器的強錯誤檢查。這就是咱們今天看到的狀況,不少網站宣稱本身遵照XHTML 1.0標準,那隻不過是說,他的頁面中用了XHTML語法,但並不能保證徹底沒有錯誤。要驗證XHTML有沒有真正起效,須要查看web服務器使用哪一種MIME type來分發頁面的。瀏覽器
W3C隨後在XHTML 1.1中取消了附錄C,即便用XHTML 1.1標準的頁面必須用新的MIME type來分發。因而這個標準並無不少人採用。這種狀況一樣發生在還沒有完成的XHTML 2.0身上,它要求強錯誤檢查,因而沒有人採用。XHTML的故事也告訴咱們,有時候先有標準再來實現,是行不通的。服務器
有了XHTML的教訓,WHAT Working Group和W3C在制定下一代HTML標準,也就是HTML5的時候,就將向後兼容做爲了一個很重要的原則。HTML5確實引入了許多新的特性,可是它最重要的一個特性是,不會break已有的網頁。你能夠將任何已有的網頁的第一行改爲<!DOCTYPE html>
,它就成也一個HTML5頁面,而且能夠照樣在瀏覽器里正常的展現。app
本文內容來自知乎睡神的評論:http://www.zhihu.com/question/19818208網站