今日在项目ajax访问中 获取接口地址,出现一个这样的错误:
Request header field Access-Token is not allowed by Access-Control-Allow-Headers in preflight response.
意思是说 Access-Token 是不被允许的 ,那么如何进行设置呢,看下面的实例即可
$.ajax({ type: type, timeout: 10000, // 超时时间 10 秒 headers: { 'Access-Token':'123456' }, url: url, data: data, success: function(data) { }, error: function(err) { }, complete: function(XMLHttpRequest, status) { //请求完成后最终执行参数 } })
那么程序报错了
Request header field Access-Token is not allowed by Access-Control-Allow-Headers in preflight response.
其中Access-Control-Allow-Headers 首部字段用于预检请求的响应。
查阅了很多参考资料以及各位前辈踩坑记录,得到如下总结:
报错意思是请求头中的Access-Token字段在Access-Control-Allow-Headers中没有被设置为允许.
谁来设置?
一种是font-end自己设置,在ajax在中设置beforeSend
$.ajax({ type: type, timeout: 10000, beforeSend: function(xhr) { xhr.setRequestHeader("Access-Toke"); }, headers: { 'Access-Token':123456 }, url: url, data: data, success: function(data) { }, error: function(err) { }, complete: function(XMLHttpRequest, status) { //请求完成后最终执行参数 } });
还有一种:
在服务器代码中加入: 服务器端就加这么一句话即可
header("Access-Control-Allow-Headers: Access-Token");
这样的一句话,即可解决上述问题
headers: { 'Access-Token':123456 }, 这个header头 这样传递以后 在 PHP $_SERVER 中的值是 $_SERVER['HTTP_ACCESS_TOKEN'] 自动转换成这样了,切记
简单跨域设置:
//header('Access-Control-Allow-Origin: *'); header("Access-Control-Allow-Headers: Access-Token"); // Origin, X-Requested-With, Content-Type, Accept header('Access-Control-Allow-Methods: GET, POST, PUT,DELETE');
这是一个简单的jquery实例
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <script src="https://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script> <script type="text/javascript"> $.ajax({ 'url':'http://www.qbjf.com/index.php/hellow/index2', 'method':'post', 'headers':{ /*'aaa':'123456', 'accept':"application/json; charset=utf-8",*/ 'Access-Token':'asdfasd' }, 'data':{ 'username':'123', 'password':'456' }, success:function(data){ console.log(data); } }); </script> </head> <body> </body> </html>