跨域CORS问题简单完美解决

问题由来

get请求变成了options,post和delete请求也变成了opeions;原来这就是跨域的非简单请求:

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。
非简单请求是那种对服务器有特殊要求的请求,比如请求方法是PUT或DELETE,或者Content-Type字段的类型是application/json。
非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。
浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。
只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest请求,否则就报错。

参看:http://www.ruanyifeng.com/blog/2016/04/cors.html
所以,跨域问题的解决主要在服务器端,

服务端

最简单有效的配置是:

 $response->header('Access-Control-Allow-Origin', '*');
 $response->header('Access-Control-Allow-Methods', 'GET,POST,DELETE,PATCH,PUT,OPTIONS');//'*'
 $response->header('Access-Control-Allow-Headers', 'token');//头部运行自定义的字段
 $response->header('Access-Control-Max-Age', 7200);//2小时,减少预检

客户端:jQuery-Demo

新建一个ajax.html,放到本地(最好是服务器某个目录下),代码如下:




    
    jQuery-Ajax-CORS-Demo









如果还不明白,请看看权威的英文文档:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

你可能感兴趣的:(跨域CORS问题简单完美解决)