首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带3scale的CORS

带3scale的CORS
EN

Stack Overflow用户
提问于 2017-05-30 19:53:57
回答 4查看 1.2K关注 0票数 1

我们正在尝试建立一个基于OpenShift的3scale平台来管理REST服务和JavaScript web应用程序之间的应用程序接口访问。身份验证应使用放在HTTP标头中的用户密钥进行管理。这两个应用程序可以通过不同的URL访问:

代码语言:javascript
复制
JS web application:     http://siteA.example.com
REST API application:   http://siteB.example.com

所以我们使用CORS在webapp上实现跨域资源。这引入了浏览器发送的几个OPTIONS预检请求,但没有user-key标头,因此从3scale接收到HTTP 403错误。

有没有办法避免这种行为?

EN

回答 4

Stack Overflow用户

发布于 2017-05-30 22:57:50

如果您不能在应用程序级别处理它,那么您可以使用nginx If语句来处理它。

代码语言:javascript
复制
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/

票数 1
EN

Stack Overflow用户

发布于 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

代码语言:javascript
复制
#### 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 /”块下

代码语言:javascript
复制
...
location / {
include /opt/openresty/nginx/conf/cors.conf;
  set $provider_key null;
  set $cached_key null;
...

一旦进行了此更改,我的浏览器就能够成功地发出请求。

CORS on Nginx文档被用作基准,我注意到只需要修改选项部分就可以获得所需的结果。

票数 1
EN

Stack Overflow用户

发布于 2019-09-24 04:27:09

当环境变量APICAST_PATH_ROUTING设置为true,并且APIcast公开多个服务时,如果没有为所有服务启用CORS策略,印前检查选项请求将收到403 (禁止)响应。

在3scale内的所有服务/apis上设置CORS策略。

更多信息来自RedHat:https://issues.jboss.org/browse/THREESCALE-3063

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44261553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档