Same Origin Policy, SOP (동일 사이트 정책)
웹 브라우저에서 실행되는 자바스크립트 클라이언트에서 원래 코드가 제공된 사이트 외에 다른 사이트(다른 출처의 사이트)에는 접근을 제외하는 규칙
Resource Origin (Resource 출처)
리소스의 출처는 URI의 스킴, 호스트, 포트까지로 정의한다.
다음 리소스는 같은 출처다.
- http://restapi.org
- http://restapi.org:80
- http://restapi.org/js/my-mashup.js
반면, 다음의 각 리소스는 출처가 서로 다르다.
- http://restapi.org
- https://restapi.org
- http://www.restapi.org
- http://restapi.org:8080
- https://restapi.org:80
- http://restapi.com http://wrml.org
Cross-Origin Resource Sharing, CORS (교차 사이트의 리소스 공유)
교차 사이트의 리소스 공유CORS(Cross-Origin Resource Sharing)는 W3C에서 제안한 웹
브라우저에서 교차 사이트로 요청할 수 있도록 하는 방법이다.
CORS에서는 GET, HEAD, POST 이외의 요청 메서드에 대해 preflight 요청 상 호작용을 정의한다. preflight 요청은 CORS 호환 웹 브라우저와 서버 간에 자바 스크립트 클라이언트의 실제 요청이 교차 사이트의 리소스에 접근하기 전 ‘무대 뒤에서’ 발생한다.
REST API는 CORS 제안인 Access-Control-Allow-Origin HTTP 헤더를 사용해서 리소스에 대한 교차-사이트 접근을 허용하는 사이트를 나열할 수 있다. 현재 웹 브라우저의 대부분은 Origin이나 Access-Control- Request-Method 같은 특별한 HTTP 요청 헤더를 보냄으로써 CORS를 지원 한다. Origin 헤더 값은 요청 자바스크립트 클라이언트의 스킴/호스트/포트의 소스 위치를 나타낸다. Access-Control-Request-Method 헤더 값은 CORS preflight 요청 때 보내지는데, 클라이언트의 실제 요청에서 어떤 HTTP 요청이 사용되는지를 나타낸다.