본문 바로가기

CORS 헤더 생성기

브라우저 처리

허용할 출처, 메서드, 요청 헤더, credentials, max-age를 넣어 CORS 응답 헤더를 만듭니다. * 출처와 credentials를 같이 쓰는 등 브라우저가 거부하는 조합은 미리 막아 줍니다.

사용 전 확인
  • 파일·이미지·문서 처리 도구는 브라우저 안에서 처리되더라도 원본에 개인정보나 민감 정보가 포함될 수 있습니다. 공유·제출 전 원본과 결과를 한 번 더 확인하세요.
도구 실행입력 후 결과 확인
CORS 헤더 생성기 샘플 실행

다른 도메인의 프런트엔드가 API를 호출하면 브라우저는 서버의 CORS 응답 헤더를 보고 허용 여부를 정합니다. 이 도구는 허용 출처, 메서드, 요청 헤더와 옵션을 받아 Access-Control-Allow-* 헤더 묶음을 만들어 서버 설정에 바로 붙일 수 있게 합니다.

브라우저 처리
샘플 결과
Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 600
Vary: Origin
자바스크립트가 활성화되면 이 영역이 실제 입력, 실행, 결과 패널로 바뀝니다.

CORS 헤더 생성기 사용 가이드

다른 도메인의 프런트엔드가 API를 호출하면 브라우저는 서버의 CORS 응답 헤더를 보고 허용 여부를 정합니다. 이 도구는 허용 출처, 메서드, 요청 헤더와 옵션을 받아 Access-Control-Allow-* 헤더 묶음을 만들어 서버 설정에 바로 붙일 수 있게 합니다.

출처는 경로 없이 https://app.example.com처럼 적어야 하고, credentials=true(쿠키·인증 포함)와 * 출처는 브라우저가 함께 허용하지 않으므로 오류로 알려 줍니다. 특정 출처를 지정하면 캐시가 섞이지 않도록 Vary: Origin도 붙입니다.

출처를 여러 개 적으면 헤더에는 하나만 들어갈 수 있다는 점과, 요청의 Origin을 목록과 비교해 그대로 돌려줘야 한다는 처리 방법을 안내합니다. max-age가 Chrome의 상한인 7200초를 넘으면 그 사실도 함께 표시합니다.

사용 방법

  1. '허용 출처' 칸에 https://app.example.com이나 *를 적습니다. 여러 개면 쉼표로 잇습니다.
  2. '메서드' 칸에 GET, POST, OPTIONS처럼 적고, '세부 설정' 칸에 'Content-Type, Authorization; credentials=true; max-age=600'처럼 요청 헤더와 옵션을 적습니다.
  3. '실행'을 누르면 응답 헤더 목록과 필요한 안내가 나옵니다.

예시: 쿠키를 쓰는 SPA용 API

입력
https://app.example.com
---
GET, POST, OPTIONS
---
Content-Type, Authorization; credentials=true; max-age=600
결과
Access-Control-Allow-Origin: https://app.example.com
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 600
Vary: Origin

expose=X-Total-Count을 더하면 Access-Control-Expose-Headers 줄도 생깁니다.

이럴 때 쓰면 좋아요

  • 프런트엔드와 API 도메인이 달라 브라우저 콘솔에 CORS 오류가 날 때
  • Nginx·Express·Spring 설정에 넣을 CORS 헤더 값을 정리할 때
  • 쿠키 인증을 쓰는 API의 credentials 설정이 맞는지 확인할 때
  • 응답의 X-Total-Count 같은 헤더를 프런트엔드에서 읽어야 할 때

문제가 생겼을 때

'credentials=true는 * 출처와 함께 쓸 수 없습니다' 오류

쿠키나 인증 헤더를 함께 보내는 요청은 출처를 정확히 지정해야 합니다. * 대신 https://app.example.com처럼 실제 출처를 적으세요.

'출처 형식이 아닙니다' 오류

출처에는 경로나 끝 슬래시가 없어야 합니다. https://app.example.com/login이 아니라 https://app.example.com으로 적으세요.

활용 팁

  • 헤더를 응답에 넣었는데도 오류가 나면 OPTIONS 사전 요청(preflight)에도 같은 헤더가 붙는지 개발자 도구의 네트워크 탭에서 확인하세요.
  • Access-Control-Allow-Credentials는 true일 때만 의미가 있어 false일 때는 줄 자체를 넣지 않습니다.

자주 묻는 질문

출처를 여러 개 허용하려면 어떻게 하나요?

헤더에는 출처를 하나만 쓸 수 있습니다. 서버 코드에서 요청의 Origin 헤더가 허용 목록에 있으면 그 값을 Allow-Origin에 그대로 넣고 Vary: Origin을 함께 보내세요.

max-age는 얼마로 두는 게 좋나요?

브라우저마다 상한이 있어 Chrome은 7200초(2시간), Firefox는 86400초(24시간)까지만 적용합니다. 설정이 자주 바뀌면 600초 정도가 무난합니다.

CORS 설정으로 API 보안이 강화되나요?

CORS는 브라우저가 다른 출처의 응답을 읽을지 정하는 규칙일 뿐, 서버 접근 자체를 막지는 않습니다. 인증과 권한 검사는 서버에서 따로 해야 합니다.