如何通过falcon_cors启用`OPTIONS`请求?

时间:2017-07-11 11:27:56

标签: python python-2.7 cors gunicorn falcon

我正在使用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,但我仍然遇到同样的错误。我还应该为此更新什么?

1 个答案:

答案 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进行响应。