🔎 CORS란?
Cross-Origin Resource Sharing, 즉 교차 출처 리소스 공유 정책으로 엇갈린 다른 출처를 의미한다
- 출처(Origin)란?
- 우리가 어떤 사이트를 접속할 때 인터넷 주소창에 URL을 통해 접근하게 된다. URL은 여러 개의 구성 요소로 이루어져 있는데 출처는 프로토콜과 호스트, 포트까지 모두 합친 URL을 의미한다고 보면 된다
- 동일 출처 정책(Same-Origin Policy)
- 동일한 출처에 대해서만 리소스를 공유할 수 있다는 정책을 가지고 있다 → 다른 출처 서버에 있는 리소스는 상호작용이 불가능하다 (악의적인 경우를 방지하기 위해)
- 같은 출처와 다른 출처 구분은 어떻게?
- URL의 구성 요소 중 프로토콜, 호스트, 포트 이 3가지만 동일하다면 동일 출처로 판단!
🔎 오류 해결 방안
우리 프로젝트는 MSA 구조를 갖고 있기 때문에 게이트웨이 서비스의 application.yml 파일에 cors 설정을 추가하였다
gateway:
globalcors:
corsConfigurations:
'[/**]':
allowedOrigins:
- "http://localhost:3000"
allow-credentials: true
allowedHeaders:
- x-requested-with
- authorization
- content-type
- credential
- X-AUTH-TOKEN
- X-CSRF-TOKEN
allowedMethods:
- POST
- GET
- PUT
- PATCH
- OPTIONS
- DELETE
exposed-headers:
- Authorization
📢 allow-credentials를 true로 설정하면 allowedOrigins는 "*"로 설정될 수 없다
- allowedHeaders : 클라이언트 측의 CORS 요청에 허용되는 헤더 지정
- 현재 우리 프로젝트에서는 JWT 토큰을 header에 담아서 클라이언트 측으로 보내고 있다. 따라서 allowedHeaders 설정도 추가해야 403 오류가 안 뜬다
- exposed-headers : 클라이언트가 응답에 접근할 수 있는 헤더 지정
- 개발자 도구 - 네트워크 탭에 있는 데이터는 정보를 읽을 수만 있다. 클라이언트에서 서버에서 넘어온 데이터에 접근하기 위해서는 exposed-headers 설정을 추가해야 한다.
'프로젝트 내용 정리 > Sunjoo' 카테고리의 다른 글
[MSA] MSA란? 총 정리 (0) | 2024.06.30 |
---|