[Web Server] 기초 - CORS, SOP

Hyun Jin·2023년 2월 6일
0

Chapter 1-1. SOP


SOP(Same-Origin Policy)

  • SOP : 동일 출처 정책. 같은 출처의 리소스만 공유가 가능함.
  • 출처(Origin) : 프로토콜+호스트+포트.
    이 중 하나라도 다르면 동일한 출처로 보지 않음.
  • 잠재적으로 해로울 수 있는 문서를 분리함으로써 해킹 등으로 공격받을 수 있는 경로를 줄여줌

CORS(Cross-Origin Resource Sharing)

  • CORS : 교차 출처 리소스 공유. 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제.

=> 브라우저는 SOP에 의해 기본적으로 다른 출처의 리소스 공유를 막지만, CORS 설정을 통해 서버의 응답 헤더에 ‘Access-Control-Allow-Origin’을 작성하면 접근 권한을 얻을 수 있게 됨.

Chapter 1-2. CORS 동작 방식


CORS 동작 방식 3가지

1. 프리플라이트 요청 (Preflight Request)

2. 단순 요청 (Simple Request)

3. 인증정보를 포함한 요청 (Credentialed Request)

Chapter 1-2. CORS 설정 방법


CORS 설정 방법

1. Node.js 서버

Node.js로 간단한 HTTP 서버를 만들 경우, 다음과 같이 응답 헤더를 설정해줄 수 있습니다.

const http = require('http');

const server = http.createServer((request, response) => {
// 모든 도메인
  response.setHeader("Access-Control-Allow-Origin", "*");

// 특정 도메인
  response.setHeader("Access-Control-Allow-Origin", "https://codestates.com");

// 인증 정보를 포함한 요청을 받을 경우
  response.setHeader("Access-Control-Allow-Credentials", "true");
})

2. Express 서버

Express 프레임워크를 사용해서 서버를 만드는 경우에는, cors 미들웨어를 사용해서 보다 더 간단하게 CORS 설정을 해줄 수 있습니다.

const cors = require("cors");
const app = express();

//모든 도메인
app.use(cors());

//특정 도메인
const options = {
  origin: "https://codestates.com", // 접근 권한을 부여하는 도메인
  credentials: true, // 응답 헤더에 Access-Control-Allow-Credentials 추가
  optionsSuccessStatus: 200, // 응답 상태 200으로 설정
};

app.use(cors(options));

//특정 요청
app.get("/example/:id", cors(), function (req, res, next) {
  res.json({ msg: "example" });
});
profile
새싹 프론트엔드 개발자

0개의 댓글