제목 | CI CORS 설정 | ||
---|---|---|---|
카테고리 | CI 2, 3 | ||
글쓴이 | smile_jax | 작성시각 | 2017/11/28 15:42:34 |
|
|||
안녕하세요. Q&A에 관련 질문을 올렸지만 해결이 안되어 CI에서 직접 CORS 설정을 해 보고 있습니다. Nginx에서 어떤 설정을 하던 마지막에는 404에러가 나는데, 이 부분은 CI의 설정문제로 보여져서, 순수하게 CI의 설정만으로 아래와 같이 시도해 봤습니다.
오류는 405 Status :: Method Not Allowed 로 출력이 됩니다. 요청.응답 헤더에는 모두 있는데, preflight의 Option 때문에 그런것인지요? 설정을 어떻게 바꿔야 정상적으로 통신이 될까요?
* REST_Controller.php /** * List of allowed HTTP methods * * @var array */ protected $allowed_http_methods = ['get', 'delete', 'post', 'put', 'options', 'patch', 'head'];
* Login.php /* |-------------------------------------------------------------------------- | Login controller |-------------------------------------------------------------------------- */ class Login extends REST_Controller { function __construct(){ if (isset($_SERVER['REQUEST_URI'])) { $req_uri = explode('/',$_SERVER['REQUEST_URI']); if ($req_uri[1] == API_URI) { get_config(array('csrf_protection' => false)); header('Access-Control-Allow-Origin: *'); header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method"); header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE"); $method = $_SERVER['REQUEST_METHOD']; if($method == "OPTIONS") { die(); } } } parent::__construct(); } .....생략 * Client Ajax var reqData = '{"mb_id":"5n_id","mb_pw":"1234"}'; $.ajax({ type: 'POST', url: 'https://api.mydomain.com/member/login', crossDomain : true, processData: false, async: false, cache: false, contentType: 'application/json; charset=UTF-8', data: reqData, dataType: 'json', success: function(data) { console.log(data); }, // Success Function error: function(xhr, response){ console.log("Error code is " + xhr.status + " and the error is " + response); } }); * Header 비교 -- 응답헤더
HTTP/2.0 405 Method Not Allowed date: Tue, 28 Nov 2017 06:59:24 GMT content-type: application/json; charset=utf-8 server: nginx/1.10.3 (Ubuntu) access-control-allow-origin: * access-control-allow-headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method access-control-allow-methods: GET, POST, OPTIONS, PUT, DELETE content-encoding: gzip vary: Accept-Encoding X-Firefox-Spdy: h2 -- 요청헤더
OPTIONS /member/login HTTP/1.1 Host: api.mydomain.com User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:55.0) Gecko/20100101 Firefox/55.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate, br Access-Control-Request-Method: POST Access-Control-Request-Headers: content-type Origin: https://web.mydomain.com Connection: keep-alive
|
|||
다음글 | 모델 cannot call constructor 에러 ... (3) | ||
이전글 | ci mail 라이브러리 전송 문제 (2) | ||
변종원(웅파)
/
2017/11/28 16:04:04 /
추천
1
rest library 사용법을 다시 보셔야할거 같네요. 주소에서 login 다음이 생략되어 있으니 login 컨트롤러안의 index 메소드가 있어야 작동을 할 것이고 post로 전송을 했으니 index_post() 라는 메소드가 있어야 작동합니다. 사용법 확인 바랍니다.
|
smile_jax
/
2017/11/28 16:57:26 /
추천
0
답변 감사합니다. 답변 내용을 보고 힌트를 얻어 코드 확인해 보니 response의 REST_Controller에 404를 주어 내보내더군요.(다른 개발자가 개발해 놓음 ㅠㅠ) 이런줄 모르고 삽질을,,,,
|