2016-11-09 4 views
2

Dropwizard v1.0.0을 사용 중이며 CORS를 구현했지만 Safari, IE 및 Edge에서 오류가 발생했습니다. 그러나 Firefox 및 Chrome에서 작동합니다.IE, Edge 및 Safari에서 DropWizard 기반 API에 CORS 요청이 있지만 Chrome 및 Firefox에서 작동 중입니다.

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에 적용됩니다.

내가 콘솔에서 얻고

오류 메시지는 :

자원을로드하지 못했습니다 : 원산지 https://xyz.in에 의해 허용되지 않는 액세스 제어 - 허용 - 원산지

다음

가 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 

는 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 

내가 빠뜨린 내용이나 다른 세부 정보를 알려주십시오.

+0

"그것이 실패"문제의 좋은 설명이 아니다. 어떻게 실패하고 있습니까? 개발자 도구 콘솔에 어떤 오류 메시지가 표시됩니까? 네트워크 탭의 내용은 무엇입니까? 작동하는 브라우저와 실패한 브라우저에 대한 요청 및 응답의 조합에 대해 다른 점은 무엇입니까? – Quentin

+0

@Quentin은 콘솔의 오류 메시지와 Chrome 및 Edge의 요청 헤더를 포함하여 더 자세한 정보를 추가했습니다. 더 자세한 정보가 필요하면 알려주십시오. – gagangupt16

+0

"원본 https://xyz.in은 허용되지 않습니다"... "원본 : https://xyz.zapr.in"... "원본 : https://adimprints.zapr.in"- **이 원본 중 어느 것도 일치하지 않습니다 **, 그것은 당신이 세 가지 다른 페이지를 가지고있는 것처럼 보이고 그 요청은 두 사람에 의해 트리거되고 오류 메시지는 세 번째 요청에 의한 것입니다. – Quentin

답변

0

이 시도 :

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");