到目前为止,我一直在使用 Pyramid 从 python 包内的文件夹中提供静态资产,如他们的文档中所述:
config.add_static_view('static', 'myapp:static')
并从模板中加载它们,如下所示:
<script type="text/javascript" src="{{ request.application_url }}/static/js/jquery-1.7.1.min.js"></script>
但是,我注意到 Chrome 会发出这样的警告:
Resource interpreted as Stylesheet but transferred with MIME type apache/2.2.14: "http://mydomain.com/static/js/jquery-1.7.1.min.js"
或者
Resource interpreted as Stylesheet but transferred with MIME type text/plain: "http://mydomain.com/static/js/jquery-1.7.1.min.js"
这发生在硬刷新时,似乎加载的 3-4 个随机资源<head>
使用了错误的 Content-Type 标头(根据 Pyramid 文档,标头由文件扩展名确定)。
我无法推断出错误的标题是如何设置的。有时,它是text/plain
针对 javascript/CSS 文件的,有时它是类似路径/static/js/something.js
(并且此路径与请求 URL 没有任何关系),有时它是Server
标头的值,apache/2.2.14
如上所示。
这是一个大问题,因为当 CSS 以错误的 Content-Type 返回时,它不会被渲染,这会破坏整个页面。我通过/static
使用 Apache 捕获请求并使用它来服务静态资产,同时让所有其他请求通过 Pyramid 解决了这个问题。我不再在 Chrome 中看到错误的 MIME 类型警告。但是,我想知道是否有人遇到过这个问题,以及它是否是 Pyramid 错误,或者我是否做错了什么。
编辑:我忘了提供我如何部署我的应用程序的规范。生产服务器运行 Apache 2.2,应用程序在 mod_wsgi 下运行。我遵循的过程几乎在本教程中逐字描述:http: //docs.pylonsproject.org/projects/pyramid/en/1.0-branch/tutorials/modwsgi/index.html。重要提示:该问题仅在通过 mod_wsgi 在 Apache 上运行时发生。当我在女服务员上本地运行应用程序时,Content-Type 标头始终正确。