- CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유)
: 추가 HTTP 헤더를 사용하여 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제- 출처: URL의 스키마(프로토콜), 호스트(도메인), 포트로 정의
- 프로토콜, 호스트, 포트 모두 일치해야 같은 출처
🏷 정석적인 방법
🏷 우회적인 방법
- proxy 기능 사용
- 브라우저 → React 앱: 데이터 요청
- React 앱 → 백엔드(서버): 해당 요청 전달
- 백엔드(서버) → React 앱: 응답 데이터 전송
- React 앱 → 브라우저: 서버로부터 받은 응답 데이터를 전달
- 브라우저는 React앱으로부터 데이터를 전달받기 때문에 CORS 정책 위반 사실을 모름
- proxy 기능을 통해 브라우저를 속이는 것
webpack dev server proxy
: webpack dev server에서 제공하는 proxy 기능 사용
CRA(create-react-app)을 통한 리액트 프로젝트
"proxy"
값 설정"proxy" : "우회할 API 주소"
기존의 fetch나 axios를 통해 요청하던 부분에서 도메인 부분 제거
// proxy 설정 전
export async function getAllfetch() {
const response = await fetch('우회할 api주소/params');
.then(() => {
...
})
}
// proxy 설정 후
export async function getAllfetch() {
const response = await fetch('/params');
.then(() => {
...
})
}
http-proxy-middleware 사용
http-proxy-middleware 라이브러리 설치
npm install http-proxy-middleware --save
React 앱의 src 파일 안에서 setupProxy.js 파일을 생성
→ 파일 안에서 설치한 라이브러리 불러오기
→ proxy middleware 사용
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use(
// proxy가 필요한 path prameter 입력
'/api',
createProxyMiddleware({
// 타겟이 되는 api url를 입력
target: 'http://localhost:5000',
//대상 서버 구성에 따라 호스트 헤더가 변경되도록 설정하는 부분
changeOrigin: true,
})
);
};
기존의 fetch나 axios를 통해 요청하던 부분에서 도메인 부분 제거
// proxy 설정 전
export async function getAllfetch() {
const response = await fetch('우회할 api주소/params');
.then(() => {
...
})
}
// proxy 설정 후
export async function getAllfetch() {
const response = await fetch('/params');
.then(() => {
...
})
}