DATADOG 을 함께 운영하는 사이트 경우, 서브 도메인 주소를 WEB API 로 호출할 경우, 아래와 같이 HEADER 에 정책을 추가해 줘야 합니다.
Datadog RUM의 allowedTracingUrls 설정으로 인해 자동으로 추가되는 분산 추적 헤더(traceparent, tracestate)가 CORS Preflight 요청에서 차단되고 있기 때문이죠.
문제점:
- Datadog RUM이 allowedTracingUrls에 포함된 도메인으로의 XHR/Fetch 요청에 traceparent 헤더를 자동 삽입
- 서브 도메인 간 Cross-Origin 요청이므로 Preflight 요청(OPTIONS) 발생
- 서버의 Access-Control-Allow-Headers에 traceparent가 없으면 CORS 차단
Access to XMLHttpRequest at 'https://XXXXX/api/...'
from origin 'https://XXXXX.XXX.kr' has been blocked by CORS policy:
Request header field traceparent is not allowed by Access-Control-Allow-Headers
서버 측 CORS 설정에 Datadog 헤더 추가
서브 도메인 간 분산 추적이 반드시 필요한 경우, 서버의 CORS 정책에 Datadog 헤더를 허용 목록에 추가합니다.
"traceparent", "tracestate" 를 허용해주면 됩니다.
// =============================
// 1. CORS 정책 등록 (API 외부 호출 필요시)
// =============================
var corsOrigins = builder.Configuration.GetSection("SiteSettings:CorsOrigins").Get<string[]>()
?? throw new InvalidOperationException("SiteSettings:CorsOrigins 설정이 필요합니다.");
builder.Services.AddCors(options =>
{
options.AddPolicy("AllowSubdomains", policy =>
{
policy.WithOrigins(corsOrigins)
// ==========================================
// [수정] W3C Trace Context 헤더 추가
// ==========================================
.WithHeaders(
// 기본 헤더
"Content-Type",
"Authorization",
"X-Requested-With",
"requestverificationtoken",
// [중요] W3C Trace Context 표준 헤더 (Datadog RUM 필수)
"traceparent", // ← 추가 필요
"tracestate", // ← 추가 필요
// Datadog 전용 헤더 (기존 유지)
"x-datadog-trace-id",
"x-datadog-parent-id",
"x-datadog-origin",
"x-datadog-sampling-priority"
)
.WithMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.AllowCredentials()
.SetIsOriginAllowedToAllowWildcardSubdomains();
});
});