到目前为止,我一直在使用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"
在硬刷新时会发生这种情况,并且<head>
中加载的3-4个 随机 资源似乎提供了错误的内容类型标题(根据Pyramid文档,标题由文件扩展名决定)。
我没有能够推断出如何设置错误标头的模式。有时,javascript / CSS文件为text/plain
,有时它是/static/js/something.js
之类的路径(此路径与请求URL无关),有时它是{的值{ {1}}标题,与上面Server
一样。
这是一个很大的问题,因为当返回带有错误Content-Type的CSS时,它不会被渲染,这会破坏整个页面。我通过使用Apache捕获apache/2.2.14
请求并使用它来提供静态资产,同时让所有其他请求都通过金字塔来解决这个问题。我不再在Chrome中看到错误的MIME类型警告。但是,我想知道是否有人遇到过这个问题,是否是金字塔错误,或者我是否在做其他错误。
编辑:我忘了提供有关如何部署应用的规范。生产服务器运行Apache 2.2,应用程序在mod_wsgi下运行。我遵循的过程几乎是本教程中逐字描述的:http://docs.pylonsproject.org/projects/pyramid/en/1.0-branch/tutorials/modwsgi/index.html。 重要:只有在通过mod_wsgi在Apache上运行时才会出现此问题。当我在服务员上本地运行应用程序时,Content-Type标题始终是正确的。