HTTP 접근 제어(CORS)

4879 단어 CORS
크로스 사이트 HTTP 요청(Cross-site HTTP request)은 요청 한 자원 이 있 는 도 메 인 이 이 요청 이 가리 키 는 자원 이 있 는 도 메 인 과 다른 HTTP 요청 을 말 합 니 다.알다 시 피 보안 을 위해 브 라 우 저 는 스 크 립 트 에서 시작 하 는 크로스 오 버 요청 을 제한 합 니 다.크로스 도 메 인 은 브 라 우 저가 크로스 오 버 요청 을 제한 한 것 이 아니 라 크로스 오 버 요청 이 정상적으로 시 작 될 수 있 으 나 되 돌아 오 는 결 과 는 브 라 우 저 에 의 해 차단 되 었 습 니 다.가장 좋 은 예 는 crsf 크로스 오 버 공격 원리 입 니 다.요청 은 백 엔 드 서버 에 전송 되 었 습 니 다.크로스 오 버 여부 와 상 관 없 이!메모:일부 브 라 우 저 는 HTTPS 의 도 메 인 에서 HTTP 에 접근 하 는 것 을 허용 하지 않 습 니 다.예 를 들 어 Chrome 과 Firefox 등 브 라 우 저 는 요청 이 아직 발송 되 지 않 았 을 때 요청 을 차단 합 니 다.이것 은 특례 입 니 다.
W3C 에 소 속 된 웹 응용 작업 그룹(Web Applications Working Group)은 크로스 소스 자원 공유(Cross-Origin Resource Sharing(CORS))라 는 새로운 메커니즘 을 추천 했다.이러한 메커니즘 은 웹 응용 서버 가 크로스 오 버 액세스 통 제 를 지원 하여 안전하게 크로스 오 버 데이터 전송 을 가능 하 게 한다.특히 주의해 야 할 것 은 이 규범 은 API 용 기 를 겨냥 한 것 이다.예 를 들 어 XML HttpRequest 가 현대 브 라 우 저 에서 크로스 도 메 인 요청 을 할 수 있 도록 해 야 합 니 다.브 라 우 저 는 요청 헤더 와 정책 실행 을 포함 하여 크로스 소스 공유 가 가 져 온 새로운 구성 요 소 를 지원 해 야 합 니 다.마찬가지 로 서버 측은 이 새로운 요청 헤드 를 분석 하고 정책 에 따라 해당 하 는 응답 헤드 와 요청 한 자원 을 되 돌려 야 한다.이 글 은 사이트 관리자,서버 엔 드 프로그램 개발 자,전단 개발 자 에 게 적용 된다.
1、web.xml
<!-- cors   chrome       interceptor controller    ,    filter -->
    <filter>
      <filter-name>cors</filter-name>
      <filter-class>com.roden.interceptor.SimpleCORSFilter</filter-class>
    </filter>
    <filter-mapping>
      <filter-name>cors</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>

2、filter
package com.roden.interceptor;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;

@Component
public class SimpleCORSFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
        //           bug
        response.setHeader("Accept-Ranges", "byte");       
        chain.doFilter(req, res);
    }

    public void init(FilterConfig filterConfig) {}
    public void destroy() {}
}

참고:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

좋은 웹페이지 즐겨찾기