首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >交叉来源读取阻塞(CORB)问题与KrakenD -“应用/json”响应从帖子拒绝Chrome

交叉来源读取阻塞(CORB)问题与KrakenD -“应用/json”响应从帖子拒绝Chrome
EN

Stack Overflow用户
提问于 2019-10-31 20:42:18
回答 1查看 1.8K关注 0票数 0

auth.js:84交叉来源读取阻塞(CORB)阻止跨原点响应http://myserver/auth与MIME类型的应用程序/json。

这也不适用于Firefox,尽管Firefox错误消息更通用。奇怪的是,Firefox的网络面板显示,我想要的响应实际上被传递了,浏览器只是不接受将它传递给我的JavaScript代码的响应。

这是从我的krakend.json文件中设置的CORS:

代码语言:javascript
运行
复制
        "github_com/devopsfaith/krakend-cors": {
            "allow_origins": ["http://localhost:61552"],
            "allow_headers": ["Origin", "Authorization", "Content-Type", "Accept", "X-Auth-Token", "Referer", "User-Agent"],
            "expose_headers": ["Content-Type", "Content-Length"],
            "allow_credentials": true,
            "allow_methods": ["GET", "HEAD", "POST", "OPTIONS"]
        }

这是被调用的特定端点:

代码语言:javascript
运行
复制
    "endpoints": [{
            "endpoint": "/auth",
            "method": "POST",
            "output_encoding": "no-op",
            "extra_config": {
                "github.com/devopsfaith/krakend-ratelimit/juju/router": {
                    "maxRate": 20,
                    "clientMaxRate": 8,
                    "strategy": "ip"
                }
            },
            "backend": [{
                "url_pattern": "/connect/token",
                "encoding": "no-op",
                "sd": "dns",
                "host": ["identity-server.service.consul"],
                "disable_host_sanitize": true
            }]
        },

我的JavaScript请求如下所示:

代码语言:javascript
运行
复制
    xhr.open('POST', url);
    xhr.setRequestHeader('Accept', 'application/json');
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.withCredentials = true;
    xhr.onreadystatechange = function () {
       ...
    }

    xhr.send(...

我想过尝试将响应的内容类型更改为text/plain,以防有帮助,但我目前无法访问生成该响应的代码,而且我也不知道这是否有帮助。

当我从node.js服务器或者像邮递员这样的应用程序发出同样的请求时,一切都会恢复正常,我想看到的标题应该足够让CORS高兴了(access-control-allow-credentials: trueaccess-control-allow-origin: *)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-01 20:07:56

我终于找到了答案。

第一个问题是,当使用xhr.withCredentials = true时,它不足以获得access-control-allow-origin: *的响应头。响应头必须包含请求本身的原始来源,例如access-control-allow-origin: https://example.com

第二个问题是kraken使用的CORS模块处理通配符域的方式。如果您使用"allow_origins": []"allow_origins": ["*"],那么无论什么情况,服务器都会使用access-control-allow-origin: *进行响应。

不过,我不想对所有想要使用此服务器的主机进行白名单。

幸运的是,有人向我指出了kraken用来处理CORS的源代码(在https://github.com/rs/cors),结果发现,如果您在任何事情上都使用了除"*"之外的任何其他类型的通配符表达式,比如"http*",那么服务器就会回显原来的主机,一切都很好!我的配置现在是:

"allow_origins": ["http*"]

注意:这样做可能是危险的!如果您要将敏感数据放入cookie中,则其他任何网站都可以以这种方式获得相同的数据。

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

https://stackoverflow.com/questions/58650914

复制
相关文章

相似问题

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