Javascript KrakenD的跨源读阻塞(CORB)问题;应用程序/json“;来自帖子的回复被Chrome拒绝

Javascript KrakenD的跨源读阻塞(CORB)问题;应用程序/json“;来自帖子的回复被Chrome拒绝,javascript,cors,xmlhttprequest,cross-origin-read-blocking,krakend,Javascript,Cors,Xmlhttprequest,Cross Origin Read Blocking,Krakend,auth.js:84跨源读取阻塞(CORB)使用MIME类型application/json阻塞跨源响应 这也不适用于Firefox,尽管Firefox的错误消息更一般。奇怪的是,Firefox的网络面板显示,我想要的响应实际上得到了传递,浏览器只是不接受响应来将其传递给我的JavaScript代码 这是我的krakend.json文件中的CORS设置: "github_com/devopsfaith/krakend-cors": { "allow_ori

auth.js:84跨源读取阻塞(CORB)使用MIME类型application/json阻塞跨源响应

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

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

        "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"]
        }
这就是被称为的特定端点:

    "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请求如下所示:

    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服务器或类似Postman的应用程序发出相同的请求时,所有内容都会正确返回,并且我想看到的足以让CORS满意的标题都存在(
access control allow credentials:true
access control allow origin:
)我终于找到了答案

第一个问题是,当使用
xhr.withCredentials=true
时,获取
access control allow origin:
的响应头不够好。响应标头必须包含请求本身的原始来源,例如
访问控制允许来源:https://example.com

第二个问题是kraken使用的CORS模块处理通配符域的方式。如果您使用
“允许源代码”:[]
“允许源代码”:[“*”]
,服务器将以
访问控制允许源代码:
响应,无论发生什么情况

然而,我不想把所有想使用这台服务器的主机都列入白名单

幸运的是,有人能够向我指出kraken用来处理CORS(at)的源代码,结果是,如果您对所有内容使用除
“*”
以外的任何其他类型的通配符表达式,例如
“http*”
,那么服务器会回显原始主机,一切都很好!我的配置现在是:

“允许来源”:[“http*”]


注意:这样做可能是危险的!如果你将敏感数据放入cookie,那么同样的数据可以通过这种方式被其他任何网站使用。

我终于找到了答案

第一个问题是,当使用
xhr.withCredentials=true
时,获取
access control allow origin:
的响应头不够好。响应标头必须包含请求本身的原始来源,例如
访问控制允许来源:https://example.com

第二个问题是kraken使用的CORS模块处理通配符域的方式。如果您使用
“允许源代码”:[]
“允许源代码”:[“*”]
,服务器将以
访问控制允许源代码:
响应,无论发生什么情况

然而,我不想把所有想使用这台服务器的主机都列入白名单

幸运的是,有人能够向我指出kraken用来处理CORS(at)的源代码,结果是,如果您对所有内容使用除
“*”
以外的任何其他类型的通配符表达式,例如
“http*”
,那么服务器会回显原始主机,一切都很好!我的配置现在是:

“允许来源”:[“http*”]


注意:这样做可能是危险的!如果您将敏感数据放入Cookie中,那么通过这种方式,其他任何网站都可以使用相同的数据。

感谢您共享共享的存储库