[英]google cloud function python CORS error No 'Access-Control-Allow-Origin' header is present on the requested resource.
[英]Python Flask CORS - No 'Access-Control-Allow-Origin' header is present on the requested resource
我在 Shopify 产品页面上编写了一个简单的 Ajax 脚本。 每当单击上传按钮时,将触发此脚本并向 API 服务器发送 json 消息
jQuery.ajax({
url: "https://e20e2287e2cb.ngrok.io/return_json",
type: "POST",
data: form_data,
processData: false,
contentType: false,
contentType: "application/json",
success: function (result) {
var obj = jQuery.parseJSON( result );
jQuery(".select-loader").remove();
jQuery("body").removeClass('active-loader');
jQuery("#upload_image").removeClass("err");
jQuery("#upload_image").val("");
jQuery("#google_folder_id").val(obj.imguniquename);
jQuery("#customImage").val(obj.imgname);
jQuery("#customImageUrl").val(obj.folder_id);
jQuery("#customUniqueImage").val(obj.imguniquename);
jQuery("#upload_image").after('<p class="note note--success">Image uploaded successfully.</p>');
Cookies.set('google_folder_id', obj.imguniquename);
Cookies.set('customImage', obj.imgname);
Cookies.set('customImageUrl', obj.folder_id);
Cookies.set('customUniqueImage', obj.imguniquename);
}
});
在 API 服务器中,我用 Python 编写了以下代码:
#Flask Library
from flask import Flask, request, jsonify
from flask_cors import CORS, cross_origin
from flask_ngrok import run_with_ngrok
app = Flask(__name__)
logging.basicConfig(level=logging.INFO)
logging.getLogger('flask_cors').level = logging.DEBUG
CORS(app)
run_with_ngrok(app)
@app.route("/return_json", methods=["POST"])
def returnJson():
return jsonify({'folder_id':'yoyo', 'img':'adad', 'imgname':'bibi', 'imguniquename':'kaka'})
if __name__ == '__main__':
app.run()
谁能告诉我为什么每当触发 Ajax 脚本时我会在浏览器控制台中出现以下错误?
同时,在 API 服务器端,调试日志对我来说看起来很好,如下所示:
调试: flask_cors.extension:对“/return_json”的请求与 CORS 资源“/”匹配。 使用选项:{'origins': ['. '], '方法': 'DELETE, GET, HEAD, OPTIONS, PATCH, POST, PUT', 'allow_headers': ['。 '],'expose_headers':无,'supports_credentials':假,'max_age':无,'send_wildcard':假,'automatic_options':真,'vary_header':真,'resources':'/ ','intercept_exceptions' :真,'always_send':真}
调试: flask_cors.core:CORS 请求收到“原点” https://www.abcabc.com
DEBUG: flask_cors.core:请求的 Origin header 匹配。 发送 CORS 标头。
调试: flask_cors.core:设置 CORS 标头:MultiDict([('Access-Control-Allow-Origin','https://www.abcabc.com'),('Vary','Origin')])信息: werkzeug:127.0.0.1 - - [23/Apr/2021 11:04:44] “POST /return_json HTTP/1.1”200 -
由于我没有注意到您已经在使用 Flask-CORS,因此我正在通过一些进一步的调查来更新这个答案。
我已经启动了一个测试环境并设法使这个跨域请求正常工作而无需更改您的代码。 在此过程中,我想出了以下可能导致您出现问题的原因:
$ ngrok http 5000
;检查此要点以获取我使用的源代码和一些证据: https://gist.github.com/magnunleno/8dad91f133a22322250d6cb609792597
如果您发现任何新信息或追溯,请告诉我,以便我们制定解决方案。
当您在特定域下运行服务器(在您的情况下为 e20e2287e2cb.ngrok.io)但您的 web 客户端在不同域中运行(假设www.abcabc.com )并且他们尝试通信时,就会发生这种情况。 你真的应该看看这个。
可以通过管理您的应用程序标头Access-Control-*
来配置此行为,幸运的是,有一个很好的扩展程序可以为您执行此操作,称为Flask-CORS 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.