CORS가 존재하는 배경에는 SOP가 있다는 것을 이해한다.
protocol, host, port가 전부 일치해야 자원 요청을 할 수 있습니다.
SOP
는 웹 브라우저와 서버 관계에서 발생하며 서버와 서버 관계에서는 발생하지 않습니다.
직관적으로 말하면, 사용자의 안전 벨트 기능입니다.
브라우저에서 옵션을 설정하여 SOP를 끌 수 있습니다.
먼저, MDN document의 설명을 보겠습니다.
위 요약의 세 번째 줄에서 로딩된 위치에 있는 리소스만 Same Origin 접근할 수 있다고 해놨습니다.
그렇다면 Same Origin의 기준은 무엇인가?
아래 표는 http://fukuoka.com/service/sugoi.html
과 Same Origin인가를 비교한 것입니다.
URL | is same origin? | 이유 |
---|---|---|
http://fukuoka.com/entry/hajimete.html | yes | path만 다름 |
http://fukuoka.com/service/js/sugoi.js | yes | path만 다름 |
https://fukuoka.com/service/sugoi.html | no | protocol이 다름 |
http://fukuoka.com:8080/service/sugoi.html | no | port가 다름 |
http://tokyo.com/service/sugoi.html | no | host가 다름 |
2개의 URL을 비교해서 protocol, host, port가 같다면 Same Origin
about:blank
·javascript:URL
과 같은 URL이 포함된 페이지에서 실행되는 스크립트는 해당 URL에 포함된 문서의 원본을 상속합니다.
이 유형의 URL에는 원본 서버에 대한 정보가 포함되어 있지 않기 때문입니다.
IE는 SOP
가 적용되지 않는 경우가 있습니다.
이 예외 사항들은 비표준이며, 다른 브라우저는 지원하지 않습니다.
쌍방의 도메인 모두가 높음 단계의 보안수준을 가진 경우 (유명 기업의 도메인 같은 경우) SOP가 적용되지 않습니다.
IE는 SOP 확인 요소에 Port를 포함하지 않습니다!
따라서 http://fukuoka.com:8080/service/sugoi.html
와 http://fukuoka.com/service/sugoi.html
는 Same Origin 으로 간주되어 제한이 적용되지 않습니다.
document.domain
의 값을 현재 도메인 또는 현재 domain의 super domain으로 설정할 수 있습니다.https://developer.mozilla.org/ko/docs/Web/Security/Same-origin_policy