Access-Control-Allow-Origin 여러개 설정하는 방법
들어가며
웹 개발자로서 CORS(Cross-Origin Resource Sharing) 문제에 직면했을 확률은 매우 높습니다. 이 문제는 보안을 위해 브라우저에 존재하지만, 매번 우리를 골치 아프게 만드는 문제입니다. 특히 API를 여러 도메인에서 사용할 경우, Access-Control-Allow-Origin
을 하나 이상의 값으로 설정해야 할 때가 있습니다. 본 글에서는 이 문제를 해결하는 몇 가지 방법을 다룰 것입니다.
CORS(Cross-Origin Resource Sharing) 개요
CORS는 추가 HTTP 헤더를 사용하여, 웹 페이지가 다른 도메인에서 리소스에 접근할 수 있도록 하는 메커니즘이다. 기본적으로 웹 보안 정책인 Same-Origin Policy 때문에 이러한 기능이 필요하게 됩니다.
Access-Control-Allow-Origin이 뭔가요?
Access-Control-Allow-Origin
은 HTTP 응답 헤더 중 하나입니다. 이 헤더는 어떤 도메인이 이 리소스에 접근할 수 있는지를 정의합니다. 예를 들어, Access-Control-Allow-Origin: *
는 모든 도메인을 허용한다는 의미입니다.
여러 도메인을 허용하는 방법
서버 설정
Web 서버의 설정 파일에서 CORS 헤더를 직접 지정할 수 있습니다. Apache나 Nginx 같은 웹 서버에서도 가능합니다.
Apache
<IfModule mod_headers.c>
SetEnvIf Origin "http(s)?://(www\.)?(domain1.com|domain2.com)$" AccessControlAllowOrigin=$0
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
</IfModule>
Nginx
if ($http_origin ~* (https?://.*?domain1.com|https?://.*?domain2.com)) {
set $cors "true";
}
if ($cors = "true") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
}
프로그래밍 언어별 코드 예시
Node.js (Express)
app.use((req, res, next) => {
const allowedOrigins = ['http://domain1.com', 'http://domain2.com'];
const origin = req.headers.origin;
if (allowedOrigins.includes(origin)) {
res.setHeader('Access-Control-Allow-Origin', origin);
}
next();
});
Python (Flask)
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():
origin = request.headers.get('Origin')
allowed_origins = ['http://domain1.com', 'http://domain2.com']
if origin in allowed_origins:
response = make_response("Hello, CORS!")
response.headers['Access-Control-Allow-Origin'] = origin
return response
마치며
본 글을 통해 Access-Control-Allow-Origin
헤더를 여러 도메인에 대해 설정하는 방법을 알아보았습니다. 이러한 설정은 웹 애플리케이션의 보안과 편의성을 높이는 중요한 단계입니다. 이 글이 여러분에게 도움이 되기를 바랍니다.