https://www.example.com:8080/path/page.html
여기서 오리진은 다음과 같음
https://www.example.com:8080
이 됨예를 들어, 오리진 https://www.example.com
에서 로드된 스크립트는 기본적으로 https://api.example.com
에서 제공하는 데이터에 접근할 수 없음 (두 오리진이 다르기 때문(포트번호, 서브도메인이 다른 경우도 포함)
)
교차 출처 리소스 공유의 약자로, SOP의 제한을 우회하여 한 오리진에서 로드된 웹 애플리케이션이 다른 오리진의 리소스에 접근할 수 있도록 허용하는 메커니즘
CORS는 서버 측에서 특정 오리진을 허용하도록 설정하여 작동
CORS에서 브라우저는 두 가지 유형의 요청을 사용할 수 있음
간단한 요청
은 특정 조건을 충족하는 요청npm install express cors
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta
name="viewport"
content="width=device-width,
initial-scale=1.0"
/>
<title>최고의 CS강의!</title>
<script>
const req = () => {
fetch("http://127.0.0.1:3001/api", {
method: "GET",
headers: {
"Content-Type": "application/json",
//"Content-Type": "application/x-www-form-urlencoded",
},
})
.then((req) => req.json())
.then((e) => {
document.getElementById("love").innerText = e.data;
});
};
</script>
</head>
<body>
<h1 id="love">별점 5점은 사랑입니다.</h1>
<button onclick="req()">다른 오리진으로 요청</button>
</body>
</html>
a.js
const express = require("express");
const app = express();
const path = require("path");
const pt = path.join(__dirname, "index.html");
app.use(express.static(pt));
app.get("/", (req, res) => res.sendFile(pt));
app.listen(3000, () => {
console.log("Server listening on port 3000");
});
b.js
const express = require("express");
const app = express();
const cors = require("cors");
const corsOptions = {
origin: "http://127.0.0.1:3000", //origin: 'http://127.0.0.1:3004',
};
app.use(cors(corsOptions));
app.get("/api", (req, res) => res.json({ data: "수강생 여러분 감사합니다." }));
app.listen(3001, () => {
console.log("Server listening on port 3001");
});