Asynchronous Javascript And XML
비동기 자바스크립트와 XML(직역)
비동기적인 웹 애플리케이션의 제작을 위해 몇 가지 조합을 이용하는 웹 개발 기법
필요한 데이터만을 웹서버에 요청해서 받은 후 클라이언트에서 데이터에 대한 처리
SOP(Same-Origin Policy, 동일-출처 정책) : 문서나 스크립트가 다른 출처에서 가져온 리소스와 상호작용하는 것을 제한하는 중요한 보안 방식
동일 출처 의미 : 프로토콜,포트,호스트가 동일해야함
CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유) : 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제
- 클라이언트는 서버에게 preflight라는 사전요청을 보낸다.
- HTTP메소드는 OPTIONS를 사용하며, HOST에 클라이언트주소를, Origin에 서버주소를 넣어 보낸다.
- 이를 통해 권한이 있는지 확인할 수 있다. 서버는 preflight 요청을 핸들링하여 CORS를 설정한다.
- 허용 범위
- 모든 요청 허용
preflight 요청을 받기 위해 OPTIONS 메소드를 추가한다. 헤더에 아래 내용들을 포함시켜주면 된다.Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS Access-Control-Max-Age: 3600 Access-Control-Allow-Headers: Origin,Accept,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization
- 선별적 요청 허용
클라이언트의 헤더값을 보고 서버에서 응답헤더에 해당 출처를 허용하는 걸 담아주면 된다.# 클라이언트 요청 헤더 Origin: 요청을 보내는 페이지의 출처(도메인) Access-Control-Request-Method: 실제 요청하려는 메소드 Access-Control-Request-Headers: 실제 요청에 포함되어 있는 헤더명
# 서버 응답 헤더 Access-Control-Allow-Origin : 허용할 출처 Access-Control-Allow-Credentials: 클라이언트 요청이 쿠키를 통해서 자격 증명을 해야 하는 경우에 true. true를 응답 받은 클라이언트는 실제요청시 서버에서 정의된 규격의 인증값이 담긴 쿠키를 같이 보내야 한다. Access-Control-Expose-Headers: 클라이언트 요청에 포함되어도 되는 사용자 정의 해더. Access-Control-Max-Age: 클라이언트에서 preflight의 요청 결과를 캐시하는 시간(초) Access-Control-Allow-Methods: 요청을 허용하는 메소드. 기본값은 GET,POST이며 클라이언트에서는 헤더 값에 해당하는 메서드일 경우에만 실제 요청을 시도하게 된다. Access-Control-Allow-Headers: 요청을 허용하는 헤더.
https://ko.wikipedia.org/wiki/Ajax
https://developer.mozilla.org/ko/docs/Web/Security/Same-origin_policy
https://sjh836.tistory.com/93