今天遇到一个跨域问题记录学习下:
一、问题
跨域请求 请求头中包含自定义token字段时,浏览器报错。
Request header field token is not allowed by Access-Control-Allow-Headers
二、原因
包含自定义token字段的跨域请求,浏览器会先向服务器发送OPTIONS请求,探测该服务器是否允许自定义的跨域字段。
如果允许,则继续实际的POST/GET正常请求,否则,返回标题所示错误。
OPTIONS请求:
Request URL:http://xxx.yyy.com/zzz/api/file/uploadFile2.do Request Method:OPTIONS Status Code:200 OK Remote Address:47.92.87.25:80 Referrer Policy:no-referrer-when-downgrade
Request Headers:
Accept:*/* Accept-Encoding:gzip, deflate Accept-Language:zh-CN,zh;q=0.9,en;q=0.8 Access-Control-Request-Headers:content-type,token Access-Control-Request-Method:POST Connection:keep-alive Host:service.bz12306.com Origin:null User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
Access-Control-Request-Headers为向服务器询问是否支持跨域的自定义header字段,服务器需要适当的应答。
三、 解决
header('Access-Control-Allow-Headers:token,Content-Type');