IE的MIME嗅探

    IE從SP2開始進行了MIME嗅探的功能。以前的瀏覽器都是通過Content-Type來判斷Resoponse流是何種類型的內容,進而調用不用的處理程序進行處理,如text/html表明接受的html代碼,需要做html頁面渲染,text/jpeg表明接受的圖片文件,需要對接受到的數據流調用處理jpeg格式流的處理程序。
    IE則在此基礎上增加了對MIME的嗅探功能,不僅僅根據Content-Type來判斷,而且會根據Response流的內容來進行判斷。加入Content-Type的值是text/plain,在非IE瀏覽器中,text/plain表明的是普通的文本,瀏覽器只需要把內容展示出來就可以了。但是在IE中,如果Response的內容是類似如下的內容:
  1. <html>
  2. <script>
  3. alert(/xss/);
  4. </script>
  5. </html>
    則IE執行MIME嗅探後,會判定其內容是text/html類型,此時就會執行html的渲染邏輯,在瀏覽器中彈出/xss對話框。
    IE的此特性可以得出,在Web程序中,返回的Response一定要具有正確的Content-Type值,避免IE的“聰明”。

    問題是:如果我們的確需要給用戶提供一個普通的文件進行下載,該文件的內容含有如上格式的html相關字符,此時Content-Type的值是需要設置成text/plain(因爲這個文件的確是plain的),該怎麼辦呢?
    解決方式是:使用Content-disposition.
    Content-disposition格式:
         "content-disposition","attachment; filename=fname.ext"
    在filename=的後面寫上文件名(如foo.txt),此時瀏覽器會直接彈出對話框提示用戶是否保存此文件。
發佈了45 篇原創文章 · 獲贊 4 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章