CORS 이슈란?
CORS(Cross-Origin Resource Sharing)는 클라이언트와 서버의 포트가 다른 상태에서 클라이언트 측에서 서버 측으로 무언가를 요청했을 때 브라우저가 보안상의 이유로 요청을 차단하는 문제입니다.
가령 클라이언트 측의 포트가 3000이고 서버 측의 포트가 8000이라면 보안상의 이유로 차단됩니다.
웹개발시에 빈번하게 발생하는 에러로, 아래와같이 웹 브라우저에서 ajax, axios 등을 사용해 도메인의 서버에 url(Data)를 호출할 경우 나타내는 보안문제를 말합니다.
SOP이란?
Same-origin policy의 줄임말로 같은 Origin에만 요청을 보낼 수 있게 제한하는 보안 정책을 말합니다.
Orgin의 구성은 다음과 같습니다.
- URL Schema (Ex. http, https)
- Hostname (Ex. localhost, google.com)
- Port (EX. 80, 8080)
이 중 하나라도 다르면 SOP 정책에 위반되어 AJAX 요청이 불가합니다.
CORS 이슈 해결방법
- 서버측에서 크로스도메인을 허용하여 문제를 해결하는 방식
- 클라이언트측에서 크로스도메인을 해결하는 방식
(서버측에서 크로스도메인 설정하여 문제를 해결하는 것이 표준화된 방법이라고 하네요.)
CORS 이슈 해결 1.Spring
@CrossOrigin 어노테이션을 사용하여 간단히 해결할 수 있습니다.
CORS 이슈 해결 2. React
http-proxy-middleware를 사용하여 모듈을 설치해 사용할 수 있습니다.
npm i http-proxy-middleware 를 통해 설치한 뒤,
/src/setupProxy.js 파일을 생성해 다음과 같이 입력합니다.
import { createProxyMiddleware } from 'http-proxy-middleware';
export default function (app) {
app.use(
'/api',
createProxyMiddleware({
target: "http://localhost:8080",
changeOrigin: true,
})
);
};
그 뒤에는 기본적으로 axios 호출을 하듯 사용할 수 있습니다.
다만, 두 방식 다 사용해보니 spring(백엔드)에서 고치는게 훨씬 빠르긴 한거같네요.
참고
https://oopsys.tistory.com/266 - spring
'프로그래밍 공부' 카테고리의 다른 글
도메인이란 무엇인가? (1) | 2022.05.15 |
---|---|
[TDD] Test-Driven-Development란 무엇인가 (0) | 2022.02.24 |
HTTP 웹 기본 지식 - 3 HTTP 기본 (0) | 2021.05.11 |
윈도우용 gcc, g++ 컴파일러 MinGW 다운로드 방법 (0) | 2021.05.09 |
HTTP 웹 기본 지식 - 2 URI와 웹 브라우저 요청 흐름 (0) | 2021.05.04 |