库魔法。 text/plain 而不是 text/javascript text/css
Posted
技术标签:
【中文标题】库魔法。 text/plain 而不是 text/javascript text/css【英文标题】:libmagic. text/plain instead of text/javascript text/css 【发布时间】:2012-09-11 17:59:23 【问题描述】:我使用 libmagic 在我的项目的 Web 界面中获取文件的 mime 类型。我在 css 和 js 文件上获得 text/plain mime 类型。
例如 chromium 显示以下警告:
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
...
我该如何解决这个问题?
【问题讨论】:
为什么你为此使用 libmagic? .css 和 .js 的 mime 类型定义明确,您无需猜测它们(这几乎就是 libmagic 所做的)。 我使用了很多不同类型的文件。我不想硬编码他们的 mime 类型。 【参考方案1】:不确定您需要这个做什么。
通常您会通过扩展名、目录等知道哪些文件是什么。
最简单的方法是检查扩展 - 但猜测出于某种原因,这不是一种选择。
您可以制作自定义函数来解析和检测 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
【讨论】:
【参考方案2】:您需要做与 Apache 相同的事情:查阅 MIME 类型的扩展数据库,如果失败,请查阅 libmagic。
文本和 XML 文件通常过于通用,libmagic 无法识别。 libmagic 仅用于通过检查几个字节来确定文件类型,因此 CSS 和 JavaScript 的区别不足以确定它们的确切类型。对于 XML,libmagic 必须有相当复杂的规则来确定文件是 Xhtml、SVG、XHTML+SVG,还是生成 XHTML 和/或 SVG 的 XSLT。这超出了它的范围。
【讨论】:
以上是关于库魔法。 text/plain 而不是 text/javascript text/css的主要内容,如果未能解决你的问题,请参考以下文章
EventSource 的响应具有不是“text/event-stream”的 MIME 类型(“text/plain”)
使用 CORS 在 WebAPI 中将 text/plain 作为复杂对象发布
使用 SwiftMailer 为 text/html 和 text/plain 使用附件
AFNetworking 遇到错误 Code=-1016 "Request failed: unacceptable content-type: text/plain"