Cross-Origin Resource Sharing

쥬랑·2020년 2월 12일

CROS Setting

출처 - 1

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

교차 출처 요청의 예시: https://domain-a.com의 프론트 엔드 JavaScript 코드가 XMLHttpRequest를 사용하여 https://domain-b.com/data.json을 요청하는 경우.

보안 상의 이유로, 브라우저는 스크립트에서 시작한 교차 출처 HTTP 요청을 제한합니다. 예를 들어, XMLHttpRequest와 Fetch API는 동일 출처 정책을 따릅니다. 즉, 이 API를 사용하는 웹 애플리케이션은 자신의 출처와 동일한 리소스만 불러올 수 있으며, 다른 출처의 리소스를 불러오려면 그 출처에서 올바른 CORS 헤더를 포함한 응답을 반환해야 합니다.

동일 출처 정책(same-origin policy)은 어떤 출처에서 불러온 문서나 스크립트가 다른 출처에서 가져온 리소스와 상호작용하는 것을 제한하는 중요한 보안 방식입니다. 동일 출처 정책은 잠재적으로 해로울 수 있는 문서를 분리함으로써 가능한 공격 경로를 줄이는데 도움을 줍니다.

Server-end : Node.js

app.js

const cors = require('cors'); 			//middleware require
const corsOptions = {				//cors option value
	origin: 'http://localhost:3000',	//must write host url
	credentials: true			//preflight auth
};
app.use(cors(corsOptions));			//middleware used
app.use(function(err, req, res, next) {
	...
	//Response CORS
	res.header('Access-Control-Allow-Origin', 'http://localhost:3000');
	res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
	res.header('Access-Control-Allow-Credentials', true);
	...
});

Client-end : React.js, typescript

fetch.js

fetch('url', {
            headers: { 'Content-Type' : 'application/json', },
            credentials: 'include',	//자격증명 옵션
            method: 'POST',
            mode: 'cors',
            body: JSON.stringify(data),         
})
.then((res) => {
	//response edit
})
.then((rs) => {
	//result data edit
});
profile
작가이고 싶은 프로그래머

0개의 댓글