PHP要实现跨域访问需要在响应前加上如下代码:
// 指定允许其他域名访问
header('Access-Control-Allow-Origin:*');
// 响应类型
header('Access-Control-Allow-Methods:*');
// 响应头设置
header('Access-Control-Allow-Headers:x-requested-with,content-type');
如果发送的是非简单请求,浏览器会在正式通信之前,增加一次HTTP查询请求,称为”预检”请求(preflight),在post,put,delete发送之前发送一个 OPTIONS 请求,以判断服务端是否允许这一域访问。服务端在收到OPTIONS请求后,直接返回200即可:
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
http_response_code(200);
exit;
}
另外需要注意的是前端提交数据到后端后,如果后端发生错误(例如数据库语句执行失败)并不会输出错误信息或者输出错误信息前没有输出允许跨域的header信息,那么也会提示CORS错误。
参考:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS
http://www.ruanyifeng.com/blog/2016/04/cors.html