2014-09-25 3 views
0

서버에서 일부 날짜를 가져 오는 API가 있습니다.내 API가 AJAX를 통해 액세스 할 수 있도록 허용

public function post_events() 
{ 
    header('Access-Control-Allow-Origin: *'); 
    header('Access-Control-Allow-Methods: GET, POST'); 
    header("Access-Control-Allow-Headers: X-Requested-With"); 

    $city = Input::post('city','all'); 
    $c = Model_chart::format_chart($city); 
    return $this->response($c); 
} 

보통의 컬링 방법에서는 문제가 없습니다. 하지만 Angular.js에 $ http를 사용하여 액세스하려고하는데이 오류가 발생합니다.

XMLHttpRequest cannot load http://event.deremoe.com/vendor/events.json . No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://app.event.chart ' is therefore not allowed access.

본인은 이미 기능에 헤더를 추가했습니다. 나는 또한 curl을 검사했고 api를 호출 할 때 Access Control-Allow-Origin 헤더가 붙어있다.

여기에 누락 된 것이 있습니까?

추가 정보 : 다음은 일반 컬을 통해 나에게 반환되는 헤더 정보입니다.

Remote Address:104.28.19.112:80 
Request URL:http://event.deremoe.com/vendor/events.json 
Request Method:OPTIONS 
Status Code:404 Not Found 

Request Headersview source 
Accept:*/* 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Access-Control-Request-Headers:accept, content-type 
Access-Control-Request-Method:POST 
Connection:keep-alive 
Host:event.deremoe.com 
Origin:http://app.event.chart 
Referer:http://app.event.chart/ 
User-Agent:Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36 

Response Headersview source 
CF-RAY:16f687416fe30c35-SEA 
Connection:keep-alive 
Content-Encoding:gzip 
Content-Type:text/html; charset=UTF-8 
Date:Thu, 25 Sep 2014 10:27:17 GMT 
Server:cloudflare-nginx 
Set-Cookie:__cfduid=d1a9e4283faacc0a2b029efef586b6b931411640837342; expires=Mon, 23-Dec-2019 23:50:00 GMT; path=/; domain=.deremoe.com; HttpOnly 
Transfer-Encoding:chunked 
X-Powered-By:PHP/5.4.30 
+1

헤더가 실제로 설정된 경우 아약스 호출의 네트워크 응답을 확인할 수 있습니까? –

+0

@johnSmith 어떻게해야합니까? ... 위의 응답을 추가했습니다. –

+0

은 (는) 당신의 ajax 요청 크로스 도메인입니까? 그렇다면 jsonp를 사용하고 제공되는 콜백에서 응답을 래핑해야합니다. cURL을 통해 액세스 할 때 엉망이되지 않도록하려면 응답하려면 – martincarlin87

답변

1

브라우저는 먼저 비행 전 옵션은 API에 전화를하게하고이를 통해 오류를 트리거 것입니다 : Access-Control-Allow-Origin. 당신은 모든 옵션의 요청을 수락하여 API에 대한 엔드 포인트를 만들 수 있습니다 당신은 포스트 이벤트에 같이가 헤더를 설정할 수도 있습니다

header('Access-Control-Allow-Origin: *'); 

당신은 또한 404가 발견되지 않는받는 상태 코드를. 이는 OPTIONS 엔드 포인트를 찾을 수 없음을 의미합니다.

+0

그래서 헤더를 추가해야합니다 ('Access-Control-Allow-Methods : GET, POST ','OPTIONS '); 설명? –

+0

위에서 게시 한 코드가 끝점과 일치한다고 가정합니다. POST 메서드를 사용하는/이벤트가 사용자의 기능과 일치한다고 가정 해 보겠습니다. POST를 받기 전에 브라우저에서이 아약스 호출을 수행하려고 할 때 요청을 받으면/events에 OPTIONS 요청을 받게됩니다. API에서해야 할 일은 다음 함수와 일치하는 OPTIONS/이벤트 끝점을 정의하는 것입니다. public function options_events() { header ('Access-Control-Allow-Origin : *'); } –

+0

또한 각도에 특정한 모양을 가지고 있습니다 : [옵션 - 각도] (http://stackoverflow.com/questions/21792759/confused-about-how-to-handle-cors-options-preflight- 요청) –