【问题标题】:Google App Engine - Static files getting downloadedGoogle App Engine - 下载静态文件
【发布时间】:2015-02-05 13:18:51
【问题描述】:

我有一个 GAE 应用程序,其中有一个名为 static 的目录,其中有两个子目录 cssjs。 这些目录中的每一个都有分别是 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-jsapplication/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 类型。

标签: google-app-engine


【解决方案1】:

我遇到了同样的问题,我决定清理暂存桶。

为此,我在 GCP 控制台上打开存储桶部分,然后删除存储桶中名称为 staging.{projectname}.appspot.com 的所有文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2016-06-12
    • 2015-06-23
    • 2011-01-11
    • 2011-04-05
    相关资源
    最近更新 更多