CI 묻고 답하기

제목 CI CORS 설정
카테고리 CI 2, 3
글쓴이 smile_jax 작성시각 2017/11/28 15:42:34
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 23955   RSS

안녕하세요.

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를 주어 내보내더군요.(다른 개발자가 개발해 놓음 ㅠㅠ)

이런줄 모르고 삽질을,,,,