实际上就是服务器要预检一次接口,默认5,6秒一次,可自行更改
'Access-Control-Allow-Headers', 'appId' 来允许服务器请求中携带字段appId,如果还有其它字段,可以用逗号分隔填入;
'Access-Control-Allow-Methods',': POST, GET, OPTIONS'来允许服务器允许客户端使用 POST, GET 和 OPTIONS 方法发起请求;
添加完毕之后,响应头中增加对应字段,可以成功实现带自定义首部字段的跨域通信。
1
2
3
4
5
6
|
//响应头局部: HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 Access-Control-Allow-Headers: appId Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Origin: * |
但是我们发现每次这种情况都会触发OPTIONS请求,然后再去执行业务逻辑,虽然正常执行了,但是一个请求变成了两个,肯定增加了用户等待时间和服务器资源消耗,于是又在响应头中增加了Access-Control-Max-Age: 86400;表明该响应的有效时间为 86400 秒,也就是 24 小时。在有效时间内,浏览器无须为同一请求再次发起预检请求。浏览器自身维护了一个最大有效时间,如果该首部字段的值超过了最大有效时间,将不会生效。最后同一天内一个接口就只有一次OPTIONS请求啦,大功告成!