최근 Edge 및 Chrome 브라우저의 보안 정책 업데이트(Private Network Access, SameSite 등)로 인해, 내부망 시스템 간 호출 시 발생하는 CORS(Cross-Origin Resource Sharing) 오류 해결 과정을 정리합니다.
특히 IBM HTTP Server(IHS) 환경에서 Invalid CORS request 오류와 로그가 남지 않는 현상을 해결한 최종 설정 가이드입니다.
1. IHS (IBM HTTP Server) 설정 가이드
이 설정은 단순 CORS 허용뿐만 아니라, WAS(애플리케이션)단의 거부 에러 해결과 최신 브라우저의 사설망 접근 허용을 모두 포함한 통합본입니다.
📂 설정 파일 경로:
📂 적용 위치:
IHS_HOME/conf/httpd.conf📂 적용 위치:
<VirtualHost ...> 태그 내부
✅ httpd.conf 최종 적용 코드
<VirtualHost *:8080>
# ... 기존 설정 ...
# =========================================================================
# [1. 브라우저용 설정] CORS 및 PNA(사설망 접근) 보안 정책 대응
# =========================================================================
# 1. 도메인 화이트리스트 검사 (https 및 모든 서브도메인 허용 정규식)
# 문법: ^(시작) + http(s):// + .*(와일드카드) + \.도메인\.com + $(끝)
SetEnvIf Origin "^http(s)?://.*\.test\.com$" ACCESS_CONTROL_ORIGIN=$0
# 2. 브라우저에게 보내는 허가증 (Response Header)
Header set Access-Control-Allow-Origin %{ACCESS_CONTROL_ORIGIN}e env=ACCESS_CONTROL_ORIGIN
# 3. SSO 필수: Credentials(쿠키/세션) 전송 허용
Header set Access-Control-Allow-Credentials "true" env=ACCESS_CONTROL_ORIGIN
# 4. ★핵심: 최신 Edge PNA(Private Network Access) 허용 헤더
# (공인망에서 사설망 호출 시 차단 방지)
Header set Access-Control-Allow-Private-Network "true" env=ACCESS_CONTROL_ORIGIN
# 5. 허용 메소드 및 헤더 정의
Header set Access-Control-Allow-Methods "POST, GET, OPTIONS" env=ACCESS_CONTROL_ORIGIN
Header set Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With, Access-Control-Allow-Private-Network" env=ACCESS_CONTROL_ORIGIN
# 6. 캐싱 문제 방지
Header add Vary Origin
# =========================================================================
# [2. WAS(애플리케이션)용 설정] "Invalid CORS request" 해결
# =========================================================================
# 설명: WAS가 요청 Origin을 엄격하게 검사하여 에러를 뱉는 경우,
# IHS가 WAS로 넘기기 직전에 Origin 헤더를 '내부 도메인'으로 변조하여 통과시킴.
# ★ 수정 포인트: 아래 주소는 실제 IHS 서버의 호스트 주소(https 포함)로 변경
RequestHeader set Origin "https://www.test.com"
# ... 기존 설정 ...
</VirtualHost>
⚠️ 주의사항: 설정 적용 후 반드시 IHS를 재기동해야 합니다.
./apachectl restart
2. 테스트 및 검증 방법
🛠️ 테스트 준비 (필수)
- 브라우저 캐시 삭제 (
Ctrl+Shift+Delete) - F12 개발자 도구 실행 → [Network] 탭 확인
- 팝업이 닫히는 경우: F12 설정(F1) → '팝업용 DevTools 자동 열기' 체크
🔍 성공 기준 (Checklist)
| 확인 항목 | 정상 결과 |
|---|---|
| HTTP 상태 코드 | 200 OK (OPTIONS 및 POST 요청 모두) |
| Response Header | Access-Control-Allow-Origin 값이 요청한 도메인으로 변환되어 있어야 함 |
| Response Header | Access-Control-Allow-Private-Network: true 확인 |
3. 문제 해결 (Troubleshooting)
❌ 증상 1: 서버에 액세스 로그조차 남지 않음
원인: Mixed Content (HTTPS 페이지에서 HTTP 호출) 또는 브라우저 PNA 정책 차단
해결: 호출 URL을 https://로 변경하고, 위 설정의 PNA 헤더 적용 확인
❌ 증상 2: "Invalid CORS request" 텍스트가 화면에 뜸
원인: WAS(애플리케이션)가 요청 도메인을 거부함
해결: 위 코드의 RequestHeader set Origin "내부주소" 설정이 올바른지 확인
❌ 증상 3: ERR_CONNECTION_RESET 발생
원인: HTTPS(443) 호출을 했으나 IHS 포트가 8080(HTTP)이거나 SSL 설정이 없음
해결: IHS httpd.conf에 SSL 설정(Listen 443, 인증서) 확인