1、什么情况下会发生CORS?
当请求方与服务方不同域时,若请求是通过在浏览器内通过脚本发起的XMLHttpRequest(或ajax、axios都用封装的XMLHttpRequest)请求,就会发生跨域问题,而解决跨域问题的方法之一就是CORS(Cross-Origin Resource Sharing 跨域资源共享)
2、KOA 怎么实现CORS?
通过在服务端添加response header,Access-Control-Allow-Origin:*
KOA这样:
在Controller层的ctx中添加:
this.ctx.set("Access-Control-Allow-Origin", '*');
这样就解决了跨域问题了。
注意,这里无论Controller中是直接响应(this.ctx.body = '请求响应'),还是通过发送axios请求后将结果赋值给this.ctx.body,都只需在Controller的这个对象设置header即可。
3、什么情况下会发生OPTIONS请求
OPRIONS请求即预检请求,是在跨域情况下,发送非简单请求时触发的。非简单请求下会发送两次请求,即先发一次options请求进行服务端的是否允许访问的判断,若允许,浏览器默认会再次发送真正的请求。
4、怎么使options请求通过?
通过设置一系列request header 和 response header即可通过预检请求。
request header 类似
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type
response header 类似
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Max-Age: 86400