Разрешить доступ к моему API через AJAX

У меня есть API, который выбирает некоторую дату на сервере.

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);
}

Он отлично работает на обычных методах скручивания. Но я пытаюсь получить к нему доступ, используя $ http на Angular.js, и он получает эту ошибку.

XMLHttpRequest не может загрузить
http://event.deremoe.com/vendor/events.json. нет
Заголовок «Access-Control-Allow-Origin» присутствует в запрошенном
ресурс. ПроисхождениеHttp: //app.event.chartПоэтому не допускается
доступ.

Как видите, я уже добавил заголовки в функцию. Я также проверил на curl и заголовок Access-Control-Allow-Origin прилагается, когда я вызываю API.

Есть что-то, чего я здесь не хватает?

Дополнительная информация: Вот информация заголовка, которая возвращается мне через обычный curl.

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

0

Решение

Браузер сначала выполняет вызов параметров перед полетом в ваш API, и это вызывает ошибку: Access-Control-Allow-Origin, Вы можете создать конечную точку в вашем API, которая будет принимать все запросы OPTIONS, и вы также должны установить там заголовки, как в событиях post:

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

Код статуса, который вы также получите, 404 Not Found. Это означает, что не удается найти конечную точку OPTIONS.

1

Другие решения

Других решений пока нет …