CORS란? : 다른 Origin으로 요청을 보내기 위해 지켜야 하는 정책
1. CORS가 뭐야?Permalink
- 가령 내가 네이버에서 서비스를 이용 중인데, 뭔가 서비스를 요청할 때 데이터가 네이버로 가야되잖아. 근데, 내 소중한 데이터가 다음으로 가버리면 안되니까. 그래서 CORS 정책을 적용하는 것이지. 웹 상에서 CORS 정책은
최소한의 보안 정책
임을 알아두자. - 쉽게 말해서, CORS 정책은 요청을 하는 클라이언트 측과 요청을 받는 서버 측의 출처 정보가 일치해야 한다는 정책이다.
2. CORS ERROR가 발생하는 이유는?Permalink
- 클라이언트와 서버의 출처 정보가 일치해야 하는데, 에러가 발생하는 이유는 일치하지 않기 때문이죠.
- 일치해야하는 출처 정보는 기본적으로 http URL 정보에요.
https://rlaghdcjf12.github.io/user/users?userName=pyeongbee
https://
: 프로토콜rlaghdcjf12.github.io
: 호스트/user/users
: 패스 (Path)?userName=pyeongbee
: 쿼리 (Query String)
3. CORS ERROR가 발생하지 않으려면?Permalink
- 위에서 다룬 출처 정보가 클라이언트와 서버에서 일치해야 해요.
- 위의 출처 정보 예시에는 포함되어 있지 않은데, 출처 정보에 포트 번호가 명시되어 있다면, 포트 번호도 일치해야 해요.
- 같은 출처와 다른 출처는 아래와 같이 알 수 있어요. (기준 출처 : https://rlaghdcjf12.github.io)
URL | 같은 출처 | 이유 |
---|---|---|
https://rlaghdcjf12.github.io/member | O | 프로토콜, 호스트, 포트 일치 |
https://rlaghdcjf12.github.io/member?memberName=bee | O | 프로토콜, 호스트, 포트 일치 |
https://user:password@rlaghdcjf12.github.io/member | O | 프로토콜, 호스트, 포트 일치 |
http://rlaghdcjf12.github.io | X | 프로토콜 불일치 |
https://rlaghdcjf12.github.com | X | 호스트 불일치 |
https://naver.com | X | 호스트 불일치 |
https://rlaghdcjf12.github.io:8000 | X | 브라우저에 따라 다름 |
- 출처 정보만 일치해야하는 것이 아니라, 헤더에도 추가되는 정보가 있을 수 있다. 아래의 경우 에러가 발생할 수 있다.
수정된 헤더 : Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With, X-Correlation-Id, X-Language-Code
기존 헤더 : Content-Type, Origin, Accept, Authorization, Content-Length, X-Requested-With
4. 발생했던 문제들Permalink
- 모킹 서버를 사용하기 위해 mockoon을 이용했는데, CORS ERROR가 발생했었다. 출처 정보를 동일하게 맞춰주고, 추가한 헤더 또한 맞춰줘서 해결했다.
- AWS 서버를 연동하는 서비스를 개발했었는데, AWS CORS ERROR가 발생했었다. API Gateway에서 해당 경로의 api를 선택하면 CORS가 있는데, 여기에서 Access-Control-Allow-Origin : * 로 설정하여 해결했다.
댓글남기기