티스토리 뷰
CORS(Cross-Origin Resource Sharing)는 웹 애플리케이션이 다른 출처(도메인, 포트, 프로토콜)에서 제공하는 리소스에 접근할 수 있도록 허용하는 보안 기능입니다. 기본적으로 브라우저는 보안상의 이유로, 현재 페이지와 다른 출처에서 리소스를 가져오려 할 때 이를 제한합니다. CORS는 이런 제한을 풀어주는 방법을 제공합니다.
예시를 통해 이해하기
예를 들어, 웹사이트 https://mywebsite.com에서 동작하는 웹 애플리케이션이 있다고 가정해봅시다. 이 웹 애플리케이션이 다른 출처인 https://api.weather.com에서 날씨 데이터를 가져와 사용자에게 보여주려 한다고 해볼게요. 이때, https://mywebsite.com과 https://api.weather.com은 서로 다른 출처이기 때문에, 브라우저는 보안 정책에 의해 이 요청을 기본적으로 차단할 수 있습니다. 바로 이때 CORS가 필요합니다.
CORS가 필요한 이유
CORS는 서버가 특정 출처에서의 요청을 허용할 수 있도록 설정하는 방법입니다. https://api.weather.com 서버에서 CORS를 설정해 https://mywebsite.com에서의 요청을 허용하면, 브라우저는 이 출처에서 온 요청을 받아들입니다. 즉, 서버가 클라이언트에 "이 출처에서 온 요청은 안전하다고 간주한다"라고 알려주는 것이죠.
CORS 설정 방식
서버는 응답 헤더에 Access-Control-Allow-Origin을 추가하여 특정 출처에서 온 요청을 허용합니다. 예를 들어:
Access-Control-Allow-Origin: https://mywebsite.com
이렇게 설정하면 https://mywebsite.com에서 온 요청은 허용되지만, 그 외의 다른 출처에서 온 요청은 차단됩니다.
또는 다음과 같이 설정해 모든 출처에서의 요청을 허용할 수도 있습니다.
Access-Control-Allow-Origin: *
CORS 설정 예시
CORS 설정은 서버에서 제어하는 방식입니다. 예를 들어, Node.js와 Express.js로 서버를 운영하는 경우, CORS 설정은 다음과 같이 할 수 있습니다:
const express = require("express");
const cors = require("cors");
const app = express();
// 모든 출처에서의 요청을 허용
app.use(cors());
// 또는 특정 출처만 허용
app.use(cors({
origin: "https://mywebsite.com"
}));
app.get("/data", (req, res) => {
res.json({ message: "CORS 설정 완료!" });
});
app.listen(3000, () => console.log("서버가 실행 중입니다."));
이 코드에서 app.use(cors())는 모든 출처에서의 접근을 허용합니다. 또는 특정 출처만 허용하고자 할 경우, origin 옵션에 허용하고자 하는 출처를 지정할 수 있습니다.
정리
CORS는 웹 애플리케이션이 다른 출처의 리소스에 접근할 수 있도록 도와주는 보안 설정입니다. 다른 출처의 데이터를 가져와야 할 때 서버가 특정 출처에 대한 접근을 허용하는 방식으로 작동합니다.
'알아두면 쓸데 있는 > 코딩 지식' 카테고리의 다른 글
React와 ReactJS는 같은 용어 (0) | 2024.11.11 |
---|---|
브라우저로 실시간 화상 기능 구현하기 getUserMedia (0) | 2024.11.09 |
Babel(바벨) 이란? (1) | 2024.11.07 |
VSCode 멀티 커서 편집 (0) | 2024.10.31 |
맥(Mac)에서 백틱 입력하려면 (1) | 2024.10.29 |
- Total
- Today
- Yesterday
- javascript 필수 문법
- chrome extension 자동 배포
- x.y.z (메이저.마이너.패치)
- semver)
- mermaid-cli
- counter
- styled-components
- react router
- math.h
- 중첩 함수(nested function)
- public vs assets
- inp
- pwa(progressive web app)
- 쉽게 풀어쓴 C언어 Express
- ajax (asynchronous javascript and xml)
- 프로세스 강제 종료
- json.parse(json.stringify())
- stdlib.h
- Jest
- 소프트웨어 버전 관리
- 시맨틱 버전(semantic versioning
- useEffect
- defaultdict
- react
- 원시값(primitive)
- jackson 라이브러리
- named export vs default export
- core web vitals
- structuredclone()
- Collections
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |