Access-Control-Expose-Headers 라는 이름의 헤더는 서버가 보내는 응답에 포함된 헤더들 중, 클라이언트가 접근할 수 없는 헤더들에 대해 접근할 수 있도록 설정하는 헤더이다.
클라이언트와 서버가 서로 다른 서버를 가진 경우, 기존에는 보안상의 문제로 클라이언트가 다른 출처의 서버로 요청하는것을 제한했었다. 그러나 이에 대해 유연하게 대처하고자 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS) 정책이 등장했다.
따라서 개발자가 CORS 를 허용한다면 개발자가 지정한 제한된 출처 범위 내에서 서로 다른 출처간의 통신이 가능하다.
기본적으로 클라이언트는 CORS 정책 사용 시, 아래와 같은 헤더에만 접근이 가능하다.
따라서 예를 들어, 로그인 성공 시, 서버가 발급한 토큰을 응답으로 'Authorization' 헤더에 담아 보낼 때 기본적으로 클라이언트는 'Authorization' 헤더에 접근할 수 없다.
그러므로 Access-Control-Expose-Headers 헤더에 Authorization 헤더의 이름을 추가하여 클라이언트가 접근할 수 있도록 서버측에서 응답을 보내기 전에 설정해주어야 한다.
예시
String token = jwtUtil.createJwt(username, role, 60 * 60 * 30L);
System.out.println("token: " + token);
response.addHeader("Access-Control-Expose-Headers", "Authorization");
response.addHeader("Authorization", "Bearer " + token);