2016-09-30 3 views
0

저는 앵귤러 2로 작성한 웹 페이지를 가지고 있으며 그 끝 부분에 양식이 내 Java 서버로 전송되어야합니다. 하지만 보낼 수 없습니다. 오류가 발생합니다. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.'Access-Control-Allow-Origin'오류가 있습니다.

Access-Control-Allow 헤더를 보내도록 이미 서버를 변경했습니다. 이 함수는 다음과 같이이다 : 나는 또한 페이지 요청에 헤더 'Access-Control-Request-Method': 'POST'를 추가하는 것을 시도했다,하지만 난 여전히 오류가

public static Response buildResponse(int status, Object reponseObject, MediaType mediaType) { 
    Response.ResponseBuilder rb = Response.status(status).entity(reponseObject); 
    if (mediaType != null) { 
     rb = rb.type(mediaType); 
    } 
    rb = rb.header("Access-Control-Allow-Origin", "*"); 
    rb = rb.header("Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE, OPTIONS"); 
    rb = rb.header("Access-Control-Allow-Headers", "Origin, Content-Type, X-Auth-Token, accept"); 
    rb = rb.header("Access-Control-Allow-Credentials", true); 
    System.out.println("teste"); 
    return rb.build(); 
} 

. 크롬의 CORS 플러그인을 설치하고 활성화해도 문제가 없지만 사용자에게 플러그인을 설치하도록 요청할 수는 없습니다. 아무도 내가 누락 된 걸 압니까? 내가 언젠가는 궁지에 빠져 있었고 내가 찾은 유일한 해결책은이 브라우저 보안을 사용하지 않고 (사용자에게 요청할 수 없다) 요청에 헤더를 추가하는 것이었다.

답변

0

나는 결국 내 문제를 해결할 수있었습니다. 문제는 내 페이지와 내 서버 사이의 통신에있었습니다. CORS 블록은 브라우저에 의해 부과되며 서버는 액세스 권한을 부여하는 헤더 (질문에 함수에 넣은 헤더)를 보내야합니다. 제가 누락 된 부분은 OPTION 메서드의 헤더입니다. 내또는 POST 메소드 전에 내 JavaScript 코드가 자동으로 OPTIONS 요청 (preflight request)을 전송합니다. 내가 한 것은 수동으로 필요한 헤더로 응답하는 서버에 OPTIONS 메서드를 구현하는 것이 었습니다.

관련 문제