几个要点
服务器并不直接干预跨域的事情,也就是任何请求均可正常到达后端服务(哪怕是Options请求,ng之类的服务器默认也是会直接转发到后端服务)
ng之类的服务器不处理<font color="#f15a23"><b>简单请求</b></font>,响应时通过Access-Control-*-*系列响应头<font color="#f15a23">表明</font>自己对于跨域的态度
简单请求
CORS相关响应头
浏览器在用户发起<font color="#f15a23"><b>非简单请求</b></font>之前,应该先发送<b><font color="#f15a23">Options请求<br></font></b>并携带告知服务端接下来正式请求的Method与携带的自定义Headers<b><font color="#f15a23"><br></font></b>
非简单请求
Options请求(预检请求)
ng之类的服务器应该处理Options请求,并直接响应204/200状态,<br>并通过Access-Control-*-*系列响应头表明自己对于跨域的态度
浏览器在收到服务的响应后,会根据服务端所表明的对于跨域的态度,决定是抛错还是执行请求结果回调
简单请求在指定携带Cookie的情况下会携带Cookie头给服务器,服务器则随时可携带Set-Cookie头响应给客户端<br>但是,若服务端响头应未携带 Access-Control-Allow-Credentials: true。则:<br>1. Set-Cookie的值会被忽略,不会写入浏览器<br>2. Cookie头会触发浏览器报错,无法通过代码取得响应结果