我正在使用falcon_cors在python中创建restful服务。如果UI从其他域发送http请求,浏览器将首先发送OPTIONS请求。但我在浏览器上遇到以下错误:
XMLHttpRequest无法加载http://localhost:8000/user/。回应 预检请求没有通过访问控制检查:的值 '接入控制允许证书'回复中的标题是''哪一个 必须是真实的'当请求的凭据模式为' include'时。 起源' 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
,但我仍然遇到同样的错误。我还应该为此更新什么?
答案 0 :(得分:0)
问题中的错误消息指示的问题与OPTIONS
请求无关。
相反,问题似乎是服务器发送了一个空值Access-Control-Allow-Credentials
响应标头。要解决该问题,您需要将服务器配置为发送Access-Control-Allow-Credentials: true
。也就是说,标头值必须为“true
”。
如果服务器没有回复Access-Control-Allow-Credentials: true
,那么您的浏览器会阻止您的前端代码访问响应 - 因为您的前端JavaScript代码在其发送到服务器的请求中包含凭据,并且在这种情况下,CORS协议要求服务器使用Access-Control-Allow-Credentials: true
进行响应。