Google云端硬盘网站上的Access-Control-Allow-Origin错误
我正在使用Google云端硬盘( https://googledrive.com/host/ .. )为自助服务终端托管一个非常简单的网站。 在这个网站上,我使用jQuery load()函数来嵌入Google Drive文档中的一些内容( https://docs.google.com/document/ .. )。 这一直很有效……直到我今天刚检查过它。
该站点不再显示文档中的内容,现在在控制台中抛出错误:
XMLHttpRequest cannot load https://docs.google.com/document/d/1X1ZEtrGm8tnAvLIuzF4ch2dltVjIwQJl3Zn3bOLJS4s/pub. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://googledrive.com' is therefore not allowed access.
任何人都可以请问为什么这个工作……现在它不是……我怎么能让它再次运作?
谢谢您的帮助。
Google最近似乎更改(或删除了)文档的Access-Control-Allow-Origin
标头。 我曾经通过JS Google Drive SDK获取文档的元信息,然后使用提供的导出链接和访问令牌通过jQuery获取HTML内容。 这不再适用了。
我最终在我的应用程序中实现了一个Web代理,我传递了导出链接和访问令牌。
在Rails中(使用HTTParty
gem),控制器操作如下所示:
def get_google_doc response = HTTParty.get( params[:export_link], { headers: { 'Authorization' => 'Bearer ' + params[:access_token] } } ) render(text: response.parsed_response) end
并且JS请求是这样的:
var request = jQuery.ajax({ "url": "/get_google_doc", "type": "GET", "dataType": "html", "data": { "export_link": htmlExportLink, "access_token": accessToken } });
您可以在此处找到有关该主题的更多信息:
- jQuery – 如何删除跨域限制
- 如何规避同源政策
@dsager提供了非常好的响应,我相信,在许多情况下,他的回答将是遇到此问题的许多人的最佳解决方案。
如果有人使用Flask / Python并且不想打扰后端代码,那么这里是@dsager为Flask / Python采用的后端解决方案(注意它使用了请求模块):
import requests @app.route('/get_google_doc', methods=['POST']) def get_google_item(): if (not request.json or not 'export_link' in request.json or not 'access_token' in request.json): abort(400) headers = { 'Authorization' : 'Bearer %s' % request.json['access_token'] } r = requests.get(request.json['export_link'], headers=headers) return jsonify({'status': 200, 'success': True, 'content': r.content})