본문으로 건너뛰기
🛠️ToolsShed

CORS 정책 테스터

시뮬레이션된 브라우저 시나리오로 CORS 설정을 테스트하고 디버그합니다.

여러 출처를 쉼표로 구분하세요. * 를 사용하면 모든 출처를 허용합니다 (자격 증명과 함께 사용할 수 없음)

이 도구 소개

CORS(Cross-Origin Resource Sharing)는 브라우저가 다양한 도메인 간 요청을 처리하는 방식을 제어하는 중요한 웹 보안 메커니즘입니다. CORS 정책이 잘못 설정되면 애플리케이션이 무음으로 실패할 수 있고, 너무 관대한 정책은 API를 불법 접근에 노출합니다. CORS Policy Tester는 여러 도메인을 설정하거나 테스트 코드를 배포할 필요 없이 실제 브라우저 시나리오를 시뮬레이션하여 서버의 CORS 설정을 검증하는 데 도움이 됩니다.

이 도구를 사용하려면 API 엔드포인트 URL을 입력하고 동일 출처 요청, 단순 헤더가 있는 교차 출처 요청, 또는 사용자 정의 헤더나 HTTP 메서드가 있는 복잡한 사전 요청 등 사용 사례와 일치하는 시나리오를 선택합니다. 도구는 브라우저의 CORS 검증 프로세스를 시뮬레이션하고 서버가 응답에서 보내야 할 헤더, 요청이 성공할지 여부, 정책이 잘못 설정된 경우 브라우저가 표시할 오류 메시지를 정확히 보여줍니다. 이를 통해 프로덕션 환경 이전에 CORS 문제를 쉽게 디버깅할 수 있습니다.

이 도구는 REST API, 마이크로서비스 또는 다양한 도메인의 웹 클라이언트 요청에 대응해야 하는 모든 백엔드에서 작업하는 개발자에게 매우 유용합니다. 프론트엔드와 백엔드가 서로 다른 포트에서 실행되는 로컬 환경에서 개발하거나 타사 서비스를 통합할 때 특히 도움이 됩니다. 다양한 CORS 시나리오를 테스트함으로써 API가 안전하고 기능적임을 보장할 수 있습니다.

자주 묻는 질문

코드 구현

# CORS headers generator (Flask example)
from flask import Flask, request, jsonify

app = Flask(__name__)

CORS_CONFIG = {
    "allowed_origins": ["https://example.com", "https://app.example.com"],
    "allowed_methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
    "allowed_headers": ["Content-Type", "Authorization", "X-Requested-With"],
    "allow_credentials": True,
    "max_age": 86400,
}

def add_cors_headers(response, origin):
    allowed = CORS_CONFIG["allowed_origins"]
    if origin in allowed or "*" in allowed:
        response.headers["Access-Control-Allow-Origin"] = origin
    if CORS_CONFIG["allow_credentials"]:
        response.headers["Access-Control-Allow-Credentials"] = "true"
    response.headers["Access-Control-Allow-Methods"] = ", ".join(CORS_CONFIG["allowed_methods"])
    response.headers["Access-Control-Allow-Headers"] = ", ".join(CORS_CONFIG["allowed_headers"])
    response.headers["Access-Control-Max-Age"] = str(CORS_CONFIG["max_age"])
    return response

@app.before_request
def handle_preflight():
    if request.method == "OPTIONS":
        response = app.make_default_options_response()
        return add_cors_headers(response, request.headers.get("Origin", ""))

@app.after_request
def apply_cors(response):
    origin = request.headers.get("Origin", "")
    return add_cors_headers(response, origin)

@app.route("/api/data")
def data():
    return jsonify({"message": "CORS configured successfully"})

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.