Recent Posts
Recent Comments
Archives
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 초기셋팅
- array정적메서드
- 리터럴
- nextjs
- 스파르타코딩클럽
- 자주 까먹는
- error
- vercel
- git
- React
- 내일배움캠프
- 셋팅
- 모던 자바스크립트
- 코테
- 코드카타
- deep dive
- useRouter
- CORS
- 오블완
- 프로그래머스
- 소셜 로그인
- 티스토리챌린지
- Next
- domain
- 구글 로그인
- 프로젝트 셋팅
- js
- 코딩테스트
- vscode
- 모던자바스크립트
- Today
- Total
파피루스
[vercel] 배포했더니 CORS가 난다 (next/node/vercel) 본문
서론
vercel 배포했더니 왜 vercel domain 3개 중에 2개가 cors가 날까요?
왜??? 자기끼리 CORS가 나는 건 무슨? (사실 자기들끼리라는 말은 잘못되었다 엄연히 다른 URL인걸?)
해결책
모두에게 문을 열어주자!
case 1. Next.js 사용하는 경우, 설정 파일(next.config.js)에 아래 내용을 추가한다.
const nextConfig = {
headers: () => {
return [
{
source: "/api/:path*",
headers: [
{ key: "Access-Control-Allow-Credentials", value: "true" },
{ key: "Access-Control-Allow-Origin", value: "*" },
{
key: "Access-Control-Allow-Methods",
value: "GET,OPTIONS,PATCH,DELETE,POST,PUT",
},
{
key: "Access-Control-Allow-Headers",
value:
"X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version",
},
],
},
];
}
};
export default nextConfig;
case 2. vercel 설정 파일 (vercel.json)에 아래 내용을 추가한다.
{
"headers": [
{
"source": "/api/(.*)",
"headers": [
{ "key": "Access-Control-Allow-Credentials", "value": "true" },
{ "key": "Access-Control-Allow-Origin", "value": "*" },
{
"key": "Access-Control-Allow-Methods",
"value": "GET,OPTIONS,PATCH,DELETE,POST,PUT"
},
{
"key": "Access-Control-Allow-Headers",
"value": "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version"
}
]
}
]
}
case 3. node.js serverless function 에서 사용방법
const allowCors = (fn) => async (req, res) => {
res.setHeader("Access-Control-Allow-Credentials", true);
res.setHeader("Access-Control-Allow-Origin", "*");
// another common pattern
// res.setHeader('Access-Control-Allow-Origin', req.headers.origin);
res.setHeader(
"Access-Control-Allow-Methods",
"GET,OPTIONS,PATCH,DELETE,POST,PUT"
);
res.setHeader(
"Access-Control-Allow-Headers",
"X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version"
);
if (req.method === "OPTIONS") {
res.status(200).end();
return;
}
return await fn(req, res);
};
const handler = (req, res) => {
const d = new Date();
res.end(d.toString());
};
module.exports = allowCors(handler);
참고) 공식 문서 : https://vercel.com/guides/how-to-enable-cors
'Today I Learned > in dev' 카테고리의 다른 글
NextRouter was not mounted. https://nextjs.org/docs/messages/next-router-not-mounted (0) | 2024.07.08 |
---|---|
[vercel 배포] localhost, vercel 둘 다 쓰고 싶어요 (feat. domain/host 셋팅) (1) | 2024.07.05 |
[supabase] invalid API key (0) | 2024.07.03 |
[오류] Error: Invalid src prop (0) | 2024.07.03 |
밥 아저씨, 이게 바로 쉬운 로컬 서버 셋팅이에YO (0) | 2024.05.08 |