在跟ios(其他终端没事)对接的时候发现一个请求跨域的问题,因为没有ios无法测试(对方也没有给请求报错信息,无法定位),得知是用axios做前端请求的工具,那么我就大概知道问题了(自己用axios模拟请求一下后台)。
问题:axios请求会先发送options检验,没通过的后续的就属于跨域:
let data = {"code":"123","name":"myName"}; axios.post(`https://wei.top/index.php`,data) .then(res=>{ console.log('res=>',res); });
处理方式:后台判断options的时候设置一个header允许请求。
header('Access-Control-Allow-Origin:*'); header("Access-Control-Allow-Methods: POST, GET, OPTIONS"); if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { //下面这个header是必须的,否则就会请求显示跨域,所有合法请求都不会通过 header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization"); header("HTTP/1.1 200 OK"); exit(200); } //正常逻辑时允许的请求头 //header('Access-Control-Allow-Headers:timestamp,signtoken,bstoken,version');
当然,不想判断就一把梭(不建议):
header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Method:*'); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Expose-Headers: *'); header('Access-Control-Allow-Headers: *');