작성
·
78
0
// 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 로깅
// 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 로깅
찾아보니 OPTIONS 메서드는 CORS 문제 때문이 아닌 브라우저는 요청을 보내기전 OPTIONS 메서드로 먼저 예비요청을 보낸다는 것을 알았습니다. 그렇다면 OPTIONS 메서드는 모든 요청마다 예비 요청으로 이뤄지고 있을텐데 왜 CORS 문제일때만 OPTIONS 메서드가 로깅이 되는지 궁금합니다.
답변 2
0
외부 브라우저에서 서버로 교차 출처 요청을 보낼 때, 브라우저는 CORS 정책에 따라 필요한 경우에만 OPTIONS 요청(Preflight 요청)을 보냅니다. CORS 정책이 적용되더라도 Preflight 요청이 필요한 조건을 충족하지 않으면 OPTIONS 요청은 보내지 않습니다.
또한, 모든 요청을 정확히 확인하려면 morgan 보다는 브라우저의 개발자 도구를 사용하는 것이 더 적합합니다. 개발자 도구에서는 OPTIONS 요청 여부와 CORS 정책의 영향을 명확히 확인할 수 있습니다.
0
브라우저는 preflighted 요청일 때 options 요청을 먼저 보냅니다. preflighted 요청은 simple request가 아닌 경우를 말합니다. 다음 글에서 케이스를 봐보세요.
https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests
또한 요청을 보냈는지는 morgan에서 보는 게 아니라 브라우저 네트워크 탭에서 보시는 게 정확합니다.
사전 요청은 교차출처 요청일때 브라우저에서 안전한지 판단하기 위해서 수행되는건데 이전 수업에서는 동일 출처에서 보내는 요청이었기 때문에 OPTIONS 요청을 보내지 않았던거군요... 모든 요청에 OPTIONS 요청이 있는 줄로 잘못 알고 있었습니다... 답변 감사합니다!
답변 감사합니다!