libmagic。 text / plain而不是text / javascript text / css

时间:2012-09-19 12:14:40

标签: javascript css c libmagic

我使用libmagic在我的项目的Web界面中获取文件的mime类型。我在css和js文件上获得了text / plain mime类型。

例如,铬显示在警告之下:

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对话框

alex@alex-laptop ~ $ 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

...

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

不确定你在做什么需要这个。

通常你会知道哪些文件是扩展名,目录等。

最简单的方法是检查扩展名 - 但是出于某种原因,我猜这不是一种选择。

您可以创建自定义函数来解析和检测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

答案 1 :(得分:2)

您需要做与Apache相同的事情:查询MIME类型的扩展数据库,如果失败,请咨询libmagic。

文本和XML文件通常过于通用,无法理解libmagic。 libmagic仅用于通过检查几个字节来确定文件类型,因此CSS和JavaScript不完全不同以确定它们的确切类型。在XML的情况下,libmagic必须具有相当复杂的规则来确定文件是XHTML,SVG,XHTML + SVG还是生成XHTML和/或SVG的XSLT。这超出了它的范围。