2012-09-19 55 views
2

我使用libmagic在我的項目的Web界面中獲取文件的MIME類型。我在css和js文件上獲得text/plain mime類型。libmagic。 text/plain代替文本/ javascript text/css

例如鉻顯示如下警告:

Resource interpreted as Stylesheet but transferred with MIME type text/plain: "http://localhost:8000/jquery-ui.css". 
Resource interpreted as Script but transferred with MIME type text/plain: "http://localhost:8000/jquery.timers.js". 

的Http對話框

[email protected] ~ $ nc localhost 8000 
GET /ui.css HTTP/1.1 


HTTP/1.1 200 OK 
Connection: close 
Content-Length: 699 
Content-Type: text/plain; charset=us-ascii 
Date: Wed, 19 Sep 2012 11:41:48 GMT 

... 

我怎樣才能解決這個問題?

+0

*爲什麼*你用這個libmagic嗎? .css和.js的mime類型是明確定義的,你不需要猜測它們(這幾乎是libmagic所做的)。 –

+0

我使用了很多不同類型的文件。我不想硬編碼他們的MIME類型。 –

回答

2

您需要執行與Apache相同的操作:查閱MIME類型的擴展數據庫,如果失敗,請諮詢libmagic。

對於libmagic來說,文本和XML文件通常過於通用。 libmagic只是通過檢查幾個字節來確定文件類型,所以CSS和JavaScript沒有足夠的區別來確定它們的確切類型。在XML的情況下,libmagic必須有相當複雜的規則來確定文件是XHTML,SVG,XHTML + SVG還是生成XHTML和/或SVG的XSLT。這超出了它的範圍。

3

不知道你在做什麼需要這個。

通常你會知道哪些文件是通過擴展,目錄等

最簡單的將是什麼檢查擴展 - 但猜測,出於某種原因,是不是一種選擇。

您可以自定義函數來分析和檢測ECMA和css:

if (mime==text/plain) { mime = my_parser(data); } 

您可以使用驗證,並檢查它驗證爲CSS或JS。

您可以製作自己的magic pattern file,在那裏測試您想要的東西 - 相當容易出錯的壽;

例如(非常簡化的)...

文件my.magic:

0  search/4096 =function\ 
>&0  search/128  =) 
>>&0  search/128  ={    JavaScript 
!:mime application/javascript 

0  search/4096 ={ 
>&0  search/512  =transition- CSS3 
!:mime text/css 

0  search/4096 ={ 
>&0  search/512  =background: CSS 
!:mime text/css 

0  search/4096 ={ 
>&0  search/512  =color:   CSS 
!:mime text/css 

然後編譯:

$ file -C -m my.magic 

及用途:

$ file -im my.magic.mgc some_file