为什么这个对谷歌驱动器表的CORS请求在Firefox中失败? (适用于Chrome)

时间:2015-10-01 22:40:39

标签: ajax firefox google-drive-api xmlhttprequest cors

我尝试使用jquery ajax在javascript中从客户端请求Google工作表。

以下代码适用于Chrome,但在Firefox中失败。

问题:如何让它在Firefox中运行?

如果它是服务器配置问题,那么这是否意味着无法从Firefox客户端链接到Google云端硬盘文档?

以下是代码:

var url = 'http://docs.google.com/spreadsheets/export?id=1-on_GfmvaEcOk7HcWfKb8B6KFRv166RkLN2YmDEtDn4&exportFormat=csv';
$.ajax({
    url : url,
    type : 'GET',
    dataType : 'text',
    success : function(res, status){
        console.log('status : ' + status);
        console.log(res);
    },
    error : function(res, status, error){
        console.log('status : ' + status);
        console.log(res);
        console.log(error);
    }
});

在Chrome中,我获得了307响应,然后获得了包含所需数据的200响应。 在Firefox中,我得到的响应只有200,但是错误消息类似于"缺少Access-Control-Allow-Origin标头,同源策略不允许获取此资源"。

3 个答案:

答案 0 :(得分:3)

问题是var React = require('react'); var Material = require('material-ui'); module.exports = React.createClass({ render: function () { return (<div></div>); } }); 没有在重定向上设置CORS头。并且Chrome没有遵守规范,因为没有强制执行,因此存在各种安全漏洞。

答案 1 :(得分:2)

docs.google.com位于Chrome的HSTS预加载列表中。 http://docs.google.com的请求被透明地重写为https://docs.google.com,因此不会发生重定向。

我认为如果Firefox提取HSTS预加载列表的更新副本,这将自行解决。正如Anne所说,只需直接将链接更改为https即可解决您的使用案例。

答案 2 :(得分:0)

我找到了一种解决方法,通过稍微不同地配置Google云端硬盘并使用JSONP:

1)在Google云端硬盘中,在网络上发布文档&amp;将共享选项设置为公共

2)使用JSON类型链接以JSON格式导出数据,它看起来像:“http://spreadsheets.google.com/feeds/list/YOUR_FILE_ID/od6/public/values?alt=json&callback=myCallback”。您需要附加&amp; callback = myCallback才能使用JSONP。您可以使用jQuery进行JSONP调用。

3)要使用数据,您需要定义url中指定的回调函数,在本例中为“myCallback”

我在不同的答案中提到了类似的程序,但我认为在这里提及它也很有用,因为它直接与我面临的问题有关。