인프런 커뮤니티 질문&답변

김현수님의 프로필 이미지
김현수

작성한 질문수

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

morgan모듈이 cors 문제가 발생할때만 OPTIONS 메서드가 로깅이 되는 이유가 궁금합니다.

해결된 질문

작성

·

22

0

cors 정책 적용

// routes/v2.js
const express = require("express");
const { verifyToken, apiLimiter } = require("../middlewares");
const {
  createToken,
  getMyPosts,
  getPostsByHashtag,
  corsWhenDomainMatches,
  getFollowersByUser,
  getFollowingsByUser,
} = require("../controllers/v2");
const router = express.Router();

// router.use((req, res, next) => {
//   res.setHeader("Access-Control-Allow-Origin", "http://localhost:4000");
//   res.setHeader("Access-Control-Allow-Headers", "content-type");
//   next();
// });

router.use(corsWhenDomainMatches); // CORS 정책 적용 미들웨어

// 토큰 발급 라우터
// /v2/token
router.post("/token", apiLimiter, createToken);
...
module.exports = router;
  • morgan 로깅

     

    image.png

CORS 정책 미적용

// routes/v2.js
const express = require("express");
const { verifyToken, apiLimiter } = require("../middlewares");
const {
  createToken,
  getMyPosts,
  getPostsByHashtag,
  corsWhenDomainMatches,
  getFollowersByUser,
  getFollowingsByUser,
} = require("../controllers/v2");
const router = express.Router();

// router.use((req, res, next) => {
//   res.setHeader("Access-Control-Allow-Origin", "http://localhost:4000");
//   res.setHeader("Access-Control-Allow-Headers", "content-type");
//   next();
// });

// router.use(corsWhenDomainMatches); // CORS 미들웨어 비활성화

// 토큰 발급 라우터
// /v2/token
router.post("/token", apiLimiter, createToken);
...
module.exports = router;
  • morgan 로깅

image.png

찾아보니 OPTIONS 메서드는 CORS 문제 때문이 아닌 브라우저는 요청을 보내기전 OPTIONS 메서드로 먼저 예비요청을 보낸다는 것을 알았습니다. 그렇다면 OPTIONS 메서드는 모든 요청마다 예비 요청으로 이뤄지고 있을텐데 왜 CORS 문제일때만 OPTIONS 메서드가 로깅이 되는지 궁금합니다.

 

 

 

 

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

브라우저는 preflighted 요청일 때 options 요청을 먼저 보냅니다. preflighted 요청은 simple request가 아닌 경우를 말합니다. 다음 글에서 케이스를 봐보세요.

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests

또한 요청을 보냈는지는 morgan에서 보는 게 아니라 브라우저 네트워크 탭에서 보시는 게 정확합니다.

 

김현수님의 프로필 이미지
김현수
질문자

사전 요청은 교차출처 요청일때 브라우저에서 안전한지 판단하기 위해서 수행되는건데 이전 수업에서는 동일 출처에서 보내는 요청이었기 때문에 OPTIONS 요청을 보내지 않았던거군요... 모든 요청에 OPTIONS 요청이 있는 줄로 잘못 알고 있었습니다... 답변 감사합니다!

김현수님의 프로필 이미지
김현수

작성한 질문수

질문하기