Google Docs 电子表格的 exportLinks 上的 CORS 不工作

CORS on exportLinks for Google Docs spreadsheets not working

根据 spec,Google 可以使用驱动器 API 获得的文件元数据中的适当 exportLinks 条目下载不同格式的文档。这些条目指定的 URLs 支持 CORS,因此可以从纯 Javascript 使用它们,无需代理。

这适用于大多数文件和文档类型(文档、演示文稿),但不适用于电子表格。当您从浏览器 Javascript、

对电子表格 exportLinks URL 尝试 XHR GET 时
  1. OPTIONS 请求 returns 有效响应,但它的过期时间 header 为 Fri, 01 Jan 1990 00:00:00 GMT
  2. 此时浏览器放弃(可能是由于 Expires)
  3. 使用 curl returns 电子表格以相同的授权、引用、来源 header 执行 GET 没问题,但响应 header 不包含任何 Access-Control-Allow-Origin header,因此它不会在浏览器中运行。

其他文档类型以 OPTIONS 和 GET 的预期方式运行,返回正确的 Expires 和 CORS headers。

事实上,旧电子表格 - 那些带有 exportLink URL 看起来像 https://docs.google.com/feeds/download/spreadsheets/Export?key=XXX&exportFormat=xlsx 的电子表格也可以使用。问题仅限于新工作表,其导出链接 URL 看起来像 https://docs.google.com/spreadsheets/export?id=XXX&exportFormat=xlsx.

我使用以下步骤解决了 pigshell 的这个问题:

  1. 使用桌面浏览器访问 pigshell (Chrome/Firefox/Safari)
  2. 通过单击右侧栏中的 Google 图标附加一个 Google 帐户
  3. 在 pigshell CLI 中,

    cd /gdrive/<username@gmail.com>
    ls
    gcat <docfilename>                # Displays PDF version of doc
    gcat <spreadsheetfilename>        # CORS failure, examine browser console/devtools
    gcat <spreadsheetcreatedyearsago> # Works
    

这与此处提出的问题基本相同:

No 'Access-Control-Allow-Origin' header for exportLink

这似乎是将驱动器 API 与新版 Google 表格(其他 Google 文件类型和旧版表格不兼容)一起使用时的已知错误似乎有问题)。不幸的是,没有已知的解决方法,除了 "to introduce a server-side component that would download the file and then pass it along to the client."