1

我正在使用 falcon_cors 在 python 中创建宁静的服务。如果 UI 从不同的域发送 http 请求,浏览器会先发送一个 OPTIONS 请求。但我在浏览器上收到以下错误:

XMLHttpRequest 无法加载http://localhost:8000/user/。对预检请求的响应未通过访问控制检查:响应中“Access-Control-Allow-Credentials”标头的值为“”,当请求的凭据模式为“包含”时,该值必须为“真”。因此,不允许访问源“ http://localhost:4200 ”。XMLHttpRequest 发起的请求的凭证模式由 withCredentials 属性控制。

我已经搜索到我需要允许来自后端的 OPTIONS 才能处理此请求。所以我写我的代码如下:

f_cors = falcon_cors.CORS(allow_origins_list=[
    'http://localhost:4200',
    'http://127.0.0.1:4200',
    ],
    allow_all_headers=True, allow_all_methods=True)

app_pre_beaker = falcon.API(middleware=[
    f_cors.middleware
])

我已经指定allow_all_methods=True了创建falcon_cors,但我仍然得到同样的错误。我还应该为此更新什么?

4

1 回答 1

1

问题中的错误消息指示的问题与OPTIONS请求无关。

相反,问题似乎是服务器发送了一个Access-Control-Allow-Credentials带有空值的响应标头。要解决该问题,您需要将服务器配置为发送Access-Control-Allow-Credentials: true. 即,标头值必须为“ true”。

如果服务器没有响应,Access-Control-Allow-Credentials: true那么您的浏览器会阻止您的前端代码访问响应——因为您的前端 JavaScript 代码在它发送到服务器的请求中包含凭据,在这种情况下,CORS 协议需要服务器回应Access-Control-Allow-Credentials: true

于 2017-07-11T12:22:47.333 回答