【发布时间】:2017-03-22 19:11:41
【问题描述】:
我正在使用 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 中。
我在控制台中收到的错误消息是:
加载资源失败:Access-Control-Allow-Origin 不允许 Origin https://xyz.in
这是来自 Edge 的 OPTIONS 请求标头:
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 的 OPTIONS 请求标头:
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
请让我知道我错过了什么或任何其他需要的细节。
【问题讨论】:
-
“它失败了”不能很好地描述问题。它是如何失败的?开发者工具控制台中报告了哪些错误消息?网络选项卡说什么?对于正常工作的浏览器和失败的浏览器,请求和响应的组合有什么不同?
-
@Quentin 添加了更多详细信息,包括控制台中的错误消息以及 Chrome 和 Edge 上的请求标头。如果需要更多详细信息,请告诉我。
-
"Origin xyz.in is not allowed" … "Origin: xyz.zapr.in" … "Origin: adimprints.zapr.in" — 这些来源都不匹配,看起来像您有三个不同的页面,并且请求是由其中两个触发的,错误消息来自第三个请求。
-
@Quentin 我有 1 个仪表板,即 xyz.in 和 1 个 api (xyz-api.in)。我已经更正了细节。
标签: safari cors dropwizard microsoft-edge