允许我的API通过AJAX访问
我有一个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
浏览器发出第一个飞行前的选项调用您的API,这是什么触发错误:Access-Control-Allow-Origin
。你可以创建自己的API接受的所有选项请求一个端点,你必须也有设置的标头就像岗位事件:
header('Access-Control-Allow-Origin: *');
,你还会收到的404未找到的状态代码。这意味着无法找到OPTIONS端点。
所以我必须添加头('访问控制 - 允许 - 方法:GET,POST','OPTIONS');?您能否提供更多解释? – 2014-09-26 01:12:50
我想你上面发布的那段代码匹配一个端点 让我们假设/事件与POST方法匹配你的功能 当你试图做这个Ajax来自浏览器在接收到POST请求,您将在/ events上收到OPTIONS请求。 你在API中要做的是定义与以下函数匹配的OPTIONS/events端点: 'public function options_events(){ header('Access-Control-Allow-Origin:*'); }' – 2014-09-26 09:33:40
看看这里也是特定的角度: [选项角](http://*.com/questions/21792759/confused-about-how-to-handle-cors-options-preflight-要求) – 2014-09-26 09:40:01
你可以检查网络响应的ajax调用,如果头是真正设置? – 2014-09-25 09:58:04
@johnSmith我该怎么做? ...我在上面添加了回应。 – 2014-09-25 09:58:46
是您的ajax请求跨域?如果是这样的话,你需要使用jsonp并将回应包装在提供的回调中(如果存在),以便在通过cURL访问时不会出现乱码,因此它可以正常工作 – martincarlin87 2014-09-25 10:04:51