【发布时间】:2015-02-05 13:18:51
【问题描述】:
我有一个 GAE 应用程序,其中有一个名为 static 的目录,其中有两个子目录 css 和 js。 这些目录中的每一个都有分别是 CSS 和 JavaScript 文件。在我的 HTML 代码中,我引用了这些文件,例如:
<script src="/static/js/bootstrap-typeahead.js"></script>
我的 app.yaml 文件如下所示:
application: ********
version: 1
runtime: python27
api_version: 1
threadsafe: yes
handlers:
- url: /static
static_dir: static
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: /.*
script: main.app
libraries:
- name: webapp2
version: "2.5.2"
- name: jinja2
version: latest
但是,CSS 样式和 JavaScript 文件并未应用于 HTML 代码,当我查看源代码并单击代码中的链接时,CSS 和 JS 文件会在新选项卡中打开并弹出下载提示.
问:为什么这些文件被下载而不是与我的 HTML 链接?
编辑:我不确定这是否相关,但我的 GAE 日志显示请求返回 304 响应:
INFO 2015-02-05 18:43:51,229 module.py:639] default: "GET /static/js/bootstrap-typeahead.js HTTP/1.1" 304 -
编辑 2: 查看我的 Google Chrome 开发人员工具的网络选项卡,我知道这些文件的 mime 类型是 application/x-js 和 application/x-css。 现在,我确定这是我的问题的原因,但为什么是 mime 类型,所以当docs 明确提到这一点时,
默认情况下,App Engine 使用基于文件扩展名的 MIME 类型提供静态文件。例如,名称以 .css 结尾的文件将以 text/css 的 MIME 类型提供服务。
我尝试通过 app.yaml 通过显式指定 mime 类型来修改 mime 类型,但它仍然没有改变。
【问题讨论】:
-
这是发生在您的本地还是 GAE 上?静态目录中的文件会被缓存,并且可能看不到您正在进行的任何 mime 类型更改。
-
这发生在我的本地计算机上,但我认为这不是缓存问题,因为自从我第一次请求文件以来就一直在发生这种情况。 @JeffDeskins
-
状态
304表示not modified,所以GET是有条件的(意味着客户端声称缓存了某个版本)并且服务器不会费心发送另一个副本,因为缓存一个还是不错的。更麻烦的是看到GET /js/&c 当您声称您使用的是src="/static/js/&c(非常不同的网址!)并且您在后一个网址下提供服务, 不是在您的日志中显示的那个,根据您的app.yaml中的- url: /static。总的来说,这张照片是不可能的——你给我们看的东西肯定有一些不一致的地方! -
@AlexMartelli 很抱歉,我刚刚复制了错误的日志行。但我绝对确定服务器实际上正在将文件发送到浏览器,正如浏览器网络检查器所指示的那样。唯一的问题是 mime 类型。