【问题标题】:request blocked by CORS policy even after setting headers即使在设置标头后,请求也被 CORS 策略阻止
【发布时间】: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


【解决方案1】:

我刚刚注释掉了下面用于向python代码发送请求的AJAX命令

//xhr.withCredentials = true;
//xhr.setRequestHeader("Postman-Token", "cecaf566-fd7a-4992-8b65-cc66c074f264");

它奏效了。 很抱歉一开始没有发布 AJAX,因为我认为问题出在服务器端响应请求。

【讨论】:

    猜你喜欢
    • 2021-07-26
    • 2022-01-14
    • 2019-11-30
    • 2019-10-01
    • 1970-01-01
    • 2017-04-23
    • 2019-03-30
    • 2021-02-28
    • 1970-01-01
    相关资源
    最近更新 更多