如何启用 falcon_cors 的 `OPTIONS` 请求?

How to enable `OPTIONS` request by falcon_cors?

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

XMLHttpRequest cannot load http://localhost:8000/user/. Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Credentials' header in the response is '' which must be 'true' when the request's credentials mode is 'include'. Origin 'http://localhost:4200' is therefore not allowed access. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

我搜索过我需要允许来自后端的 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
])

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

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

相反,问题似乎是服务器发送了一个 Access-Control-Allow-Credentials 响应 header,其中包含一个空值。要解决该问题,您需要将服务器配置为发送 Access-Control-Allow-Credentials: true。也就是说,header 值必须是“true”。

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

响应