CORS请求DropWizard-based API在IE、Edge和Safari中失败,但在Chrome和Firefox中工作

CORS请求DropWizard-based API在IE、Edge和Safari中失败,但在Chrome和Firefox中工作,safari,cors,dropwizard,microsoft-edge,Safari,Cors,Dropwizard,Microsoft Edge,我正在使用Dropwizard v1.0.0并实现了CORS,但请求它在Safari、IE和Edge中失败。然而,它在Firefox和Chrome中工作 FilterRegistration.Dynamic cors = environment.servlets() .addFilter("CORSFilter", CrossOriginFilter.class); cors.setInitParameter(ALLOWED_ORIGINS_PARAM, "*"); c

我正在使用Dropwizard v1.0.0并实现了CORS,但请求它在Safari、IE和Edge中失败。然而,它在Firefox和Chrome中工作

FilterRegistration.Dynamic cors = environment.servlets()
            .addFilter("CORSFilter", CrossOriginFilter.class);

cors.setInitParameter(ALLOWED_ORIGINS_PARAM, "*");
cors.setInitParameter(ALLOWED_HEADERS_PARAM, "Content-Type,Access-Control-Allow-Origin,Authorization");
cors.setInitParameter(ALLOWED_METHODS_PARAM, "OPTIONS,HEAD,DELETE,GET,PUT,POST,PATCH,HEAD");
cors.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
此代码应用于XYZApplication.java中

我在控制台中收到的错误消息是:

加载资源失败:访问控制不允许原始站允许原始站

以下是来自Edge的选项请求标头:

Accept: */*
Accept-Encoding: gzip, deflate
Access-Control-Request-Headers: access-control-allow-origin,authorization, accept
Access-Control-Request-Method: GET
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 0
Host: xyz-api.in
Origin: https://xyz.in
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393
以下是来自Chrome的选项请求标题:

Host: xyz-api.in
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: GET
Origin: https://xyz.in
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.35 Safari/537.36
Access-Control-Request-Headers: access-control-allow-origin, authorization
Accept: */*
Referer: https://xyz.in/
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-US,en;q=0.8
请让我知道我遗漏了什么或需要的任何其他细节。

试试以下方法:

import static javax.ws.rs.core.HttpHeaders.*;

FilterRegistration.Dynamic cors = environment.servlets()
    .addFilter("CORSFilter", CrossOriginFilter.class);

cors.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, environment.getApplicationContext().getContextPath() + "*");
cors.setInitParameter(ALLOWED_METHODS_PARAM, "GET,PUT,POST,DELETE,HEAD,OPTIONS");
cors.setInitParameter(ALLOWED_ORIGINS_PARAM, "*");
cors.setInitParameter(ALLOWED_HEADERS_PARAM, "*");
cors.setInitParameter(EXPOSED_HEADERS_PARAM, "Link");
cors.setInitParameter(ALLOW_CREDENTIALS_PARAM, "true");

“它正在失败”并不是对问题的一个很好的描述。它怎么会失败?开发人员工具控制台中报告了哪些错误消息?网络标签上写了什么?对于工作的浏览器和失败的浏览器,请求和响应的组合有什么不同?@Quentin添加了更多细节,包括控制台中的错误消息以及Chrome和Edge上的请求头。如果需要更多详细信息,请告诉我。“不允许使用源代码”。“源代码:”…“源代码:”-这些源代码都不匹配,看起来您有三个不同的页面,请求由其中两个页面触发,错误消息来自第三个页面的请求。@Quentin我有一个仪表板,即xyz.in和一个api(xyz api.in). 我已经纠正了细节。