如何启用 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=].
响应
我正在使用 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=].