inblog logo
|
taker
    기술정리

    CORS 설정

    김인범's avatar
    김인범
    Jan 18, 2025
    CORS 설정
    Contents
    다른 아이피에서 요청을 할 경우 진행되는 로직
    notion image
    Allow-Header의 Content-type, Authorization 중요 ★
    Allow-method ⇒ OPTIONS 중요 ★
    Credential >> true 중요 ★ (true 일 경우: 2가지 정보[어쏘라이제이션, 쿠키] 보낼 수 있습니다.)

    다른 아이피에서 요청을 할 경우 진행되는 로직

    Options 요청이 먼저 갑니다. (Preflight 요청)
    요청을 통해 SC_OK 응답을 받는데, 이때 Cors 설정 정보가 넘어오게 됩니다.
     
    Origin 설정이 아스트릭크(*)로 되어 있을 경우에는 브라우저에서 보안이 위험하다고 판단하여,
    통신을 막습니다.
    ⇒ 브라우저 자체 블락
     
    Origin 설정이 *가 아닐 경우에는 브라우저에서 여러 요청을 보내게 되어, 통신이 가능해집니다.
    public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { System.out.println("CORS 필터 작동"); HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; String origin = request.getHeader("Origin"); System.out.println("Origin : "+origin); response.setHeader("Access-Control-Allow-Origin", origin); response.setHeader("Access-Control-Expose-Headers", "Authorization"); response.setHeader("Access-Control-Allow-Methods", "POST, PUT, PATCH, GET, DELETE, OPTIONS"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Origin, X-Key, Content-Type, Accept, Authorization"); response.setHeader("Access-Control-Allow-Credentials", "true"); // Preflight 요청을 허용하고 바로 응답하는 코드 if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { response.setStatus(HttpServletResponse.SC_OK); }else { chain.doFilter(req, res); } } }
     
    Share article

    taker

    RSS·Powered by Inblog