我使用falcon_cors v1.4.1
和falcon-cors v1.1.7
来管理对后端API的访问,该API托管在我们公司的域中。前端角应用程序托管在不同的域中(在AWS中)。
我在后端有下面的CORS设置。
import falcon
from falcon_cors import CORS
cors = CORS(allow_all_origins=True,
allow_all_headers=True,
allow_all_methods=True)
API = falcon.API(middleware=[cors.middleware])
API.add_route(CONFIG.ROOT_PATH + '/query/products', QueryProduct())
...
但是,当前端试图查询API https://mycompanydomain.com/query/products
时,将返回一个CORS错误:
Access to XMLHttpRequest at 'https://mycompanydomain.com/query/products'
from origin 'https://mycompany.aws.com' has been blocked by CORS policy:
Response to preflight request doesn't pass access control check:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
对于allow_all_origins=True
,我假设所有来源的飞行前请求都会被允许。所以不知道如何解决这个问题。
发布于 2022-07-31 17:07:23
我有后端API,它可以用GET访问,但由于飞行前的问题,不能成功地使用POST,这会导致CORS阻塞。
我发现,您只是简单地使用OPTIONS方法,您的浏览器在“实际”调用之前调用该方法的后端。这叫做飞行前请求。
它使用OPTIONS方法,而不是get/post/put。因此,这可能会有所帮助。
如果使用:
if (req.method == "OPTIONS")
{
res.writeHead(200, {"Content-Type": "application/json"});
res.end();
}
对于PHP,我使用以下代码:
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header("HTTP/1.1 200 ");
exit;
}
以下是PHP中的标题:
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Max-Age: 3600");
header("HTTP/1.1 200");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Methods, Access-Control-Allow-Headers, Authorization, X-Requested-With, Origin");
注意标题中的OPTIONS方法。
就这样。
https://stackoverflow.com/questions/73163834
复制相似问题