Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

forest_moon

CORS 란? 본문

이것저것

CORS 란?

rokga 2023. 2. 14. 15:21

CORS란?

CORS(Cross-Origin Resource Sharing)는 출처가 다른 자원들을 공유한다는 뜻으로, 한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록 하는 개념입니다. 

교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다. 웹 애플리케이션은 리소스가 자신의 출처(도메인, 프로토콜, 포트)와 다를 때 교차 출처 HTTP 요청을 실행합니다.

 

쉽게 말해 도메인 , 프로토콜, 포트 번호가 하나라도 다를 경우에는 출처가 다른 교차출처(Cross-Origin)라고 판단되며

브라우저의 보안으로 인해 Cross-Origin HTTP 요청을 제한해버린다.

권한을 부여 받기 위한 Cross-Origin 요청은 서버에서 허가를 받아야하는데,HTTP-header 통해서 받을 있다.

 

URL의 구조

다른 출처가 무엇인지 알아보기 위해서는 우선 URL(Uniform Resource Locator)의 기본적인 구조를 알아야 한다.

위 사진의 URL구조 중에서 [[Protocol + Host + Port]]  3가지가 같으면 동일 출처(Origin)라고 합니다. 

 

 

같은 출처와 다른 출처

URL CORS 이유
http://naver.com:80
http://naver.com
허용 HTTP 기본 Port인 80번이 생략
http://naver.com/placeA/index.html
http://naver.com/placeB.index.html
허용 Protocal, Host, Port 같다
http://naver.com/placeA
https://naver.com/placeB
허용X Protocol이 다름
http://naver.com
http://my.naver.com
허용X Host가 다름
http://naver.com
http://naver.com:8080
허용X 80, 8080으로 포트가 다름

다른 출처의 경우 에러로 인해 정상적인 요청이 오지 않는다

(처음 플젝 진행 할 때 프론트와 백엔드 서로 CORS 때문에 해결하기 위해 낑낑대던 기억이..)

 

 

CORS 가 필요한 이유는 ?

만약에 출처가 다른 두 개의 웹사이트가 마음대로 소통하게 된다면 어떻게 될까 ? 아마 정글이 될것이다 !

일반적인 웹사이트는 사용자 공격에 대해서 매우 취약한 구조이다.

크롬에서 개발자 도구만 열어서 본다면 javascropt 코드 등 ,, 일부 통신정보를 쉽게 열람할 수 있는데 이러한 정보들을 이용해

악용하게 된다면 중간에서 해당 사이트의 정보를 가로채 빼가거나 악용할수도 있다.  (허용되지 않은 출처에 대한 자료도 허용해줘서)

이러한 문제점을 해결하기 위해서 CORS정책이 생기게 되었다.

 

 

 

Reference

https://beomy.github.io/tech/browser/cors/

https://www.beusable.net/blog/?p=4507 

https://ko.wikipedia.org/wiki/%EB%8F%99%EC%9D%BC-%EC%B6%9C%EC%B2%98_%EC%A0%95%EC%B1%85

'이것저것' 카테고리의 다른 글

[macOS] M1 Mac에 brew 설치  (0) 2023.02.15
OAuth2.0 이란  (0) 2023.02.14
SQL 과 NOSQL  (0) 2023.02.10
JVM 메모리의 구조(코드, 데이터, 힙, 스택 영역)  (0) 2023.02.03
쿠버네티스란 ?  (0) 2023.01.09