我有一个用Express制作的简单API,该API返回json。 Express服务器正在Google App Engine上运行。我正在使用cors(https://www.npmjs.com/package/cors)启用所有CORS请求,但仍然收到“请求的资源上没有'Access-Control-Allow-Origin'标头。”从SPA应用程序执行AJAX请求时。
app.use(cors())
上述根据文档的默认设置为:
{ "origin": "*",
"methods": "GET,HEAD,PUT,PATCH,POST,DELETE",
"preflightContinue": false,
"optionsSuccessStatus": 204
}
这应该足够了,因为我只从SPA执行简单的GET请求。
有什么想法吗?
答案 0 :(得分:0)
App Engine通过 app.yaml 文件支持CORS,如此处所述:link
在您的 app.yaml 文件中,通过添加handlers
元素来修改http_headers
部分,如下所示:
handlers:
- url: /images
static_dir: static/images
http_headers:
Access-Control-Allow-Origin: '*'
# ...
然后,您可以重新部署App Engine以应用配置更改。
答案 1 :(得分:0)
我真的被文档弄糊涂了,因为它意味着 CORS 标头只能在提供静态内容时发送,而不是更常见的场景,即 CORS 告诉浏览器在通过调用时可以接受来自后端的 JSON 或 XML第三方托管脚本。
我的解决方法是将其作为应用程序本身内的自定义标头返回。例如,使用 Flask:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/")
def root():
import traceback
try:
data = {'key1': "value1", 'key2': "value2"}
return jsonify(data), 200, {'Access-Control-Allow-Origin': "*"}
except:
return format(traceback.format_exc()), 500, {'Content-Type': "text/plain"}
if __name__ == '__main__':
app.run()
答案 2 :(得分:-1)
正如我在这里回答的那样,https://stackoverflow.com/a/62075272/2235936
不需要app.yaml中的handlers
东西,只需在G存储桶上设置CORS。