【发布时间】:2019-03-25 09:24:01
【问题描述】:
我写了一个云函数来接受请求并对请求进行处理。当它来自同一个 API 域时,它按预期工作。但在跨 API 请求的情况下,我收到以下错误:
Access to XMLHttpRequest at ’URL' from origin ‘URL2’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
即使我已经按照谷歌云平台的建议更改了代码,但它不起作用
if request.method == 'OPTIONS':
headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST',
'Access-Control-Allow-Headers': 'Authorization',
'Access-Control-Max-Age': '3600',
'Access-Control-Allow-Credentials': 'true'
}
return ("",200,headers)
headers = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST',
'Access-Control-Allow-Headers': 'Authorization',
'Access-Control-Max-Age': '3600',
'Access-Control-Allow-Credentials': 'true'
}
return ("Successfully inserted",200,headers)
在 python 中发送 OPTIONS 请求时,标头是
{'Access-Control-Allow-Credentials': 'true', 'Access-Control-Allow-Headers': 'Authorization', 'Access-Control-Allow-Methods': 'POST', 'Access-Control-Allow-Origin': '*', 'Access-Control-Max-Age': '3600', 'Content-Type': 'text/html; charset=utf-8', 'Function-Execution-Id': '6bkxaumbvg7x', 'X-Cloud-Trace-Context': '2fd8aec285f8af1d36c8c45ff1184a20;o=1', 'Date': 'Mon, 25 Mar 2019 09:41:08 GMT', 'Server': 'Google Frontend', 'Content-Length': '0', 'Alt-Svc': 'quic=":443"; ma=2592000; v="46,44,43,39"'}
请指教
【问题讨论】:
-
您能否手动向服务器发送一个 OPTIONS 请求(例如使用 Postman)以检查标头是否正确返回?您应该模拟的请求在此处描述:developer.mozilla.org/en-US/docs/Glossary/Preflight_request
-
使用 Option 时添加了我的标题
-
浏览器响应POST请求的HTTP状态码是什么?使用浏览器开发工具中的网络窗格进行检查。
-
在 postman 或 python 中,此代码适用于响应代码 200。但是在 Ajax 中执行相同操作时,API 会引发此问题。我只是想知道这个问题是python代码还是用于将Json发送到api的JavaScript
-
那么如果浏览器中的状态码不是200,那是什么?我意识到邮递员或您的python测试代码中的状态代码是200;这不是问的——我问的是你在浏览器中得到的响应的状态码是什么。这是什么?
标签: python google-cloud-platform cors google-cloud-functions