2025. 9. 14. 15:54ㆍ프로그램/PHP 고급
CORS란 무엇인가?

#CORS (#CrossOriginResourceSharing)는 웹 페이지의 리소스가 다른 #도메인 에서 요청될 수 있도록 허용하는 메커니즘이다. 현대 웹 개발에서 프론트엔드와 백엔드가 분리되는 경우가 많아지면서 CORS 설정은 필수적인 요소가 되었다. 예를 들어, frontend.com에서 api.backend.com의 데이터를 요청할 때, 브라우저는 기본적으로 보안상의 이유로 이를 차단한다. 이러한 보안 정책을 #동일출처정책 (#SameOriginPolicy)이라고 한다. CORS는 이 동일 출처 정책을 완화하여, 안전하게 다른 출처의 자원을 공유할 수 있게 해준다.
동일 출처 정책 (Same-Origin Policy)
동일 출처 정책은 웹 보안의 가장 기본적인 개념 중 하나이다. 이는 한 출처에서 로드된 문서나 스크립트가 다른 출처의 리소스와 상호 작용하는 것을 제한한다. 출처는 #프로토콜 (http, https), #호스트 (www.example.com), #포트 (80, 443)의 세 가지 요소가 모두 일치해야 동일하다고 판단한다. 이 정책이 없으면 악의적인 웹사이트가 사용자의 개인정보를 탈취하거나, 민감한 정보를 열람하는 등의 행위가 가능해진다.
CORS의 동작 방식
CORS는 HTTP 헤더를 통해 동작한다. 클라이언트(브라우저)가 다른 출처의 서버에 리소스를 요청하면, 서버는 응답 헤더에 Access-Control-Allow-Origin과 같은 CORS 관련 헤더를 포함시켜서 응답한다. 브라우저는 이 헤더를 확인하여 요청을 허용할지 차단할지 결정한다.
1. 단순 요청 (Simple Requests)
GET, HEAD, POST와 같은 특정 조건을 만족하는 요청은 "단순 요청"으로 분류된다. 단순 요청은 #프리플라이트 (#Preflight) 요청 없이 바로 실행되며, 서버의 응답 헤더에 Access-Control-Allow-Origin이 포함되어 있으면 브라우저가 응답을 허용한다.
2. 프리플라이트 요청 (Preflight Requests)
단순 요청의 조건을 만족하지 않는 요청 (예: PUT, DELETE 메서드, 커스텀 헤더가 포함된 요청 등)은 실제 요청을 보내기 전에 #프리플라이트요청 을 먼저 보낸다. 이 요청은 OPTIONS 메서드를 사용하여 서버에게 실제 요청을 보낼 수 있는지 미리 확인하는 과정이다. 서버는 프리플라이트 요청에 대한 응답으로 허용하는 메서드, 헤더 등의 정보를 포함한 CORS 헤더를 보낸다. 브라우저는 이 정보를 확인하고, 허용된 경우에만 실제 요청을 보낸다.
PHP에서 CORS 설정하기

PHP에서 CORS를 설정하는 가장 일반적인 방법은 #HTTP헤더 를 직접 설정하는 것이다. 아래 코드는 PHP 스크립트의 상단에 추가하여 모든 출처에 대한 CORS를 허용하는 예제이다.
<?php
// 모든 출처에 대해 접근을 허용
header("Access-Control-Allow-Origin: *");
// 허용할 HTTP 메서드 설정
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
// 허용할 HTTP 헤더 설정
header("Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With");
// Preflight 요청에 대한 응답 (OPTIONS 메서드)
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
http_response_code(200);
exit();
}
?>
- Access-Control-Allow-Origin: *는 모든 도메인에서의 요청을 허용한다. 보안을 위해 특정 도메인만 허용하는 것이 좋다. 예시: Access-Control-Allow-Origin: https://www.yourdomain.com
- Access-Control-Allow-Methods는 허용할 HTTP 메서드를 명시한다.
- Access-Control-Allow-Headers는 클라이언트가 요청에 포함할 수 있는 헤더를 정의한다. 토큰 기반 인증을 사용할 경우 Authorization 헤더를 반드시 추가해야 한다.
요약

#CORS 는 웹 브라우저의 #보안 정책인 동일 출처 정책을 우회하여 다른 출처의 리소스를 안전하게 공유하기 위한 필수적인 메커니즘이다. #PHP 에서는 header() 함수를 사용하여 CORS 관련 HTTP 헤더를 설정함으로써 간단하게 구현할 수 있다. 올바른 CORS 설정은 #API보안 과 웹 서비스의 원활한 동작을 위해 매우 중요하다.
CORS CrossOriginResourceSharing 도메인 동일출처정책 SameOriginPolicy 프로토콜 호스트 포트 프리플라이트 Preflight 프리플라이트요청 HTTP헤더 보안 API보안 PHP
마케팅VPN, 마케팅IP, 게임IP, 클린IP, KT통신사IP, 1초 IP변경
https://xn--299ao67b9qbmsf04c.net/
VPN 5,500원 / IP교체 1,100원 / 유동프록시 22,000원 | LuzenVPN 루젠VPN
국내최저가 고정IP서비스,유동프록시(IP4000개이상제공),PPTP,L2TP,IPSec,OpenVPNVPN,통신사VPN,VPN프로그램,고정IP,고정아이피,PPTP,저렴한VPN,리니지MVPN,리니지VPN,아이온VPN,던파VPN,유동프록시,유동PROXY,바이
vpn.luzensoft.com