导出链接上的CORS for Google Docs电子表格无法正常工作

时间:2015-02-05 06:02:58

标签: google-drive-api cors

根据spec,可以使用Drive API获取的文件元数据中的相应exportLinks条目以不同格式下载Google文档。这些条目指定的URL支持CORS,因此可以从纯Javascript中使用它们,而无需代理。

这适用于大多数文件和文档类型(doc,presentation),但不适用于电子表格。当您在浏览器Javascript的电子表格exportLinks网址上尝试XHR GET时,

  1. OPTIONS请求返回有效响应,但其Expires标头为Fri, 01 Jan 1990 00:00:00 GMT
  2. 此时浏览器放弃(可能是由于Expires)
  3. 使用curl使用相同的Authorization,Referer,Origin标头进行GET返回电子表格,但响应标头不包含任何Access-Control-Allow-Origin标头,因此它不会起作用浏览器。
  4. 其他文档类型以OPTIONS和GET的预期方式运行,返回正确的Expires和CORS标头。

    事实上,旧的电子表格 - 具有类似https://docs.google.com/feeds/download/spreadsheets/Export?key=XXX&exportFormat=xlsx的exportLink网址的电子表格也可以使用。问题仅限于新工作表,其exportLink网址类似于https://docs.google.com/spreadsheets/export?id=XXX&exportFormat=xlsx

    我使用以下步骤pigshell来解决此问题:

    1. 使用桌面浏览器(Chrome / Firefox / Safari)访问pigshell
    2. 点击右栏中的Google图标
    3. 附加Google帐户
    4. 在pighell 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
      

1 个答案:

答案 0 :(得分:1)

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

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

将Drive API与新版Google表格一起使用时似乎是一个众所周知的错误(其他Google文件类型和旧版本的工作表似乎没有问题)。不幸的是,没有已知的解决方法,除了“引入一个服务器端组件,它将下载文件然后将其传递给客户端。”