今天在调试接口的时候遇到个问题:
一个请求走了两次,一次204,一次200。
且,请求204的 Request Method 是 OPTIONS
在网上查看资料后得知,是因为跨域而引起的,OPTIONS是一种“预检请求”,
浏览器在处理跨域访问的请求时如果判断请求为复杂请求,则会先向服务器发送一条预检请求(这就是为什么第一次请求接口是204),根据服务器返回的内容浏览器判断服务器是否允许该请求访问。
如果web服务器采用cors的方式支持跨域访问,在处理复杂请求时这个预检请求是不可避免的。
解决方法:
后端接口我是通过egg + mongoose 搭建的。config.default.js 文件里面设置的是:
config.security = {
csrf :{
enable:false
},
domainWhiteList: [ '*' ],
};
// add cors config here
config.cors = {
origin: 'http://localhost:3000', // 访问白名单,根据你自己的需要进行设置
credentials: true, //允许Cook可以跨域,
allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH'
};