我们正在尝试建立一个基于OpenShift的3scale平台来管理REST服务和JavaScript web应用程序之间的应用程序接口访问。身份验证应使用放在HTTP标头中的用户密钥进行管理。这两个应用程序可以通过不同的URL访问:
JS web application: http://siteA.example.com
REST API application: http://siteB.example.com所以我们使用CORS在webapp上实现跨域资源。这引入了浏览器发送的几个OPTIONS预检请求,但没有user-key标头,因此从3scale接收到HTTP 403错误。
有没有办法避免这种行为?
发布于 2017-05-30 22:57:50
如果您不能在应用程序级别处理它,那么您可以使用nginx If语句来处理它。
location / {
if ($request_method = OPTIONS ) {
add_header Access-Control-Allow-Origin "http://example.com";
add_header Access-Control-Allow-Methods "GET, OPTIONS";
add_header Access-Control-Allow-Headers "Authorization";
add_header Access-Control-Allow-Credentials "true";
...
add_header Content-Length 0;
add_header Content-Type text/plain;
return 200;
}
...
}通过http://blog.rogeriopvl.com/archives/nginx-and-the-http-options-method/
发布于 2018-01-06 01:24:49
我在3scale中使用AWS AMI时遇到了同样的问题,并能够通过将app_key和app_id添加到options请求的allowed标头来解决它。
在测试中,请求在postman中工作,但不能通过Chrome工作。在我的例子中,当浏览器发出印前检查选项时,它会导致拒绝,因为CORS默认不允许使用app_key和app_id标头。
添加对这些头的支持可以通过在“Access-Control-Allow- headers”头的末尾添加一个条目来实现。我将此配置创建为一个单独的文件,名为cors.conf
#### CORS ####
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,app_id,app_key';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
#### CORS END ####然后,该位置被包括在nginx.conf中的任何“cors.conf /”块下
...
location / {
include /opt/openresty/nginx/conf/cors.conf;
set $provider_key null;
set $cached_key null;
...一旦进行了此更改,我的浏览器就能够成功地发出请求。
CORS on Nginx文档被用作基准,我注意到只需要修改选项部分就可以获得所需的结果。
发布于 2019-09-24 04:27:09
当环境变量APICAST_PATH_ROUTING设置为true,并且APIcast公开多个服务时,如果没有为所有服务启用CORS策略,印前检查选项请求将收到403 (禁止)响应。
在3scale内的所有服务/apis上设置CORS策略。
更多信息来自RedHat:https://issues.jboss.org/browse/THREESCALE-3063
https://stackoverflow.com/questions/44261553
复制相似问题