본문 바로가기

Programming/Web

[php] CROSS DOMAIN 대응 방법

CROSS DOMAIN ISSUE 는 JS의 정책에 따라 AJAX등을 이용하여 다른 도메인에 접속을 시도하려는 경우 보안 문제로 간주하고 차단함에 의해 발생한다.

 

이를 해결하기 위해선 다른 도메인에서 오는 접속에 대해 허용을 해주어야 한다.

 

* response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
- POST, GET, OPTIONS, DELETE 에 대해 요청을 허가.

* response.setHeader("Access-Control-Max-Age", "3600");

- HTTP Request 가 발생할 때 preflight request라는 요청이 발생. preflight request는 해당 요청으로 접속이 가능한지를 미니 가늠해보기 위한 요청. option메서드를 통해 서버에 전달되므로 option 메소드를 허용해야 함.
* response.setHeader("Access-Control-Allow-Headers", "x-requested-with");

- 비공식적으로 ajax로 접속할 경우 해당 해더를 실어서 보내기 때문에 해당 헤더에 대해 요청을 허용함.
* response.setHeader("Access-Control-Allow-Origin", "*");

- 요청을 허용하고자 하는 도메인을 기입. 특정 도메인만을 허용하고 싶다면 "*" 대신 해당 도메인을 기입해야 함.

php 에서는 헤더를 쉽게 설정할 수 있고 검색 약간이면 쉽게 해당 내용에 대해 찾을 수 있으나, 저금 더 유연한 대응을 하고 싶은 경우에는 해당 코드를 사용하면 된다.

 

if (isset($_SERVER['HTTP_ORIGIN'])) { // CROSS DOMAIN 대응 CORS
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400');    // cache for 1 day
}

    // Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {

if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");         

if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers:        {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

exit(0);
}

'Programming > Web' 카테고리의 다른 글

[php] base 64 url safe  (0) 2018.02.22
[PHP] 문자열 검색  (0) 2017.05.22
XML 특수문자 처리방법  (0) 2017.03.07
[JSP] Scope Object  (0) 2016.04.07