CORS (Cross-Origin Resource Sharing)
CORS (Cross-Origin Resource Sharing) = 교차 출처 리소스 공유 (다른 출처 리소스 공유)
Network 탭 Headers 부분
General
Response Headers
Request Headers
Request Headers에서 origin: https://platform.twitter.com
Response Headers에서 access-control-allow-origin: https://platform.twitter.com
이 경우에는 브라우저에서 보낸 출처(origin)와 서버에서 응답해준 접근이 가능한 출처(access-control-allow-origin)가 동일한 경우에는 CORS 에러가 발생하지 않는다.
만약 origin 과 access-control-allow-origin이 달랐다면 CORS에러가 발생했을 것 이다.
CORS에러 발생 예시
Access to fetch at 'https://api-kkeolmusae.com/v2/test' from origin 'https://kkeolmusae.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
main.8aa7e1b6663d6e10e0c9.bundle.js?8aa7e1b6663d6e10e0c9:1 GET https://api-kkeolmusae.com/v2/test net::ERR_FAILED 502
+ 다른 출처로 요청할 때 세션이나 쿠키 정보를 담아야할 때, api를 호출할 때 `credentials: "include", `를 추가해야 한다.
fetch('https://example.com', {
credentials: 'include',
});
그리고 서버에서도
cors({
origin: "https://www.example.com", // 허용하고자 하는 도메인. "*" 는 사용하지 못한다.
credentials: true, // credentials: true 라는 옵션은 다른 도메인 간에 쿠키 공유를 허락할 때 사용한다.
}),
이런 식으로 설정해줘야 한다.
다만 서버쪽 cors 설정을 다음과 같이 할 수도 있는데
cors({
origin: true,
credentials: true,
}),
origin: true 라는 것은 모든 출처(origin)에서 오는 요청을 다 받겠다 라는 것이라 보안에 취약하다.
(origin: "*" 와 origin: true는 다르다.)
origin: true는 도메인 주소가 자동으로 Access-Control-Allow-Origin에 들어간다.
origin: "*" (와일드카드): 브라우저에 리소스에 접근하는 임의의 origin으로부터의 요청 코드를 허용한다.
굉장히 도움이 많이된 자료들
https://www.zerocho.com/category/NodeJS/post/5e9bf5b18dcb9c001f36b275
https://www.zerocho.com/category/NodeJS/post/5e9bf5b18dcb9c001f36b275
www.zerocho.com
https://evan-moon.github.io/2020/05/21/about-cors/
CORS는 왜 이렇게 우리를 힘들게 하는걸까?
이번 포스팅에서는 웹 개발자라면 한번쯤은 얻어맞아 봤을 법한 정책에 대한 이야기를 해보려고 한다. 사실 웹 개발을 하다보면 CORS 정책 위반으로 인해 에러가 발생하는 상황은 굉장히 흔해서
evan-moon.github.io
[NODE] 📚 cors 모듈 - CORS 간편 설정하기
CORS 허용 설정 하는 방법 Node.js 서버 프로젝트에서 cors(cross origin resource sharing) 문제를 해결하는 방법은 크게 2가지가 있다. 하나는 직접 헤더를 명시해서 출처(origin)을 필터링하는 것이고, 다른
inpa.tistory.com
[WEB] 📚 악명 높은 CORS 개념 & 해결법 - 정리 끝판왕 👏
악명 높은 CORS 에러 메세지 웹 개발을 하다보면 반드시 마주치는 멍멍 같은 에러가 바로 CORS 이다. 웹 개발의 신입 신고식이라고 할 정도로, CORS는 누구나 한 번 정도는 겪게 된다고 해도 과언이
inpa.tistory.com
https://developer.mozilla.org/ko/docs/Web/API/Fetch_API/Using_Fetch
Fetch 사용하기 - Web API | MDN
Fetch API는 HTTP 파이프라인을 구성하는 요청과 응답 등의 요소를 JavaScript에서 접근하고 조작할 수 있는 인터페이스를 제공합니다. Fetch API가 제공하는 전역 fetch() (en-US) 메서드로 네트워크의 리소
developer.mozilla.org
https://chuckchoiboi.github.io/cors-tutorial/
CORS Tutorial
chuckchoiboi.github.io
https://www.hahwul.com/2019/04/10/why-failed-get-data-with-this-cors-policy/
Access-Control-Allow-Origin가 wildcard(*)일 때 왜 인증 정보를 포함한 요청은 실패하는가 😫
TL;DR CORS 정책 상 Access-Control-Allow-Origin: * 인 경우 Origin의 제한없이 요청하고 결과를 읽을 수 있지만, 이러한 경우 쿠키를 제거하고 요청하도록 정책이 구성되어 있어서 인증 정보를 포함한 요청
www.hahwul.com