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 |