问题:每次发起请求,同一条url有两条请求
第一条请求Method是OPTIONS请求,
第二条请求Method才是实际发出的POST或GET请求
是由Web服务器处理跨域访问引起的,是一种“预检请求”
1.Chrome浏览器 ,勾选Disable cache选项就不能缓存,不勾选
2.后台服务器设置ctx.set({"Access-Control-Max-Age": "100"});
第一个OPTIONS的请求是由Web服务器处理跨域访问引发的,OPTIONS是一种“预检请求”。
浏览器在处理跨域访问的请求时如果判断请求为复杂请求,则会先向服务器发送一条预检请求,根据服务器返回的内容浏览器判断服务器是否允许该请求访问。
如果web服务器采用cors的方式支持跨域访问,在处理复杂请求时这个预检请求是不可避免的。
查询代码发现,我们的web服务器确实采用的是cors来解决跨域访问的问题,并且我们在header中添加了自定义参数,导致我们的每次请求都为复杂请求,从而产生了每次请求都会发送两条请求的现象。
既然浏览器在处理复杂请求时,不可避免的要发送预检请求,那么能否减少预检请求的次数呢?
比如,预检一次设置一个有效期,在有效期内不再重复预检。设置Access-Control-Max-Age这个参数即可达到预期目标。该参数用来指定本次预检请求的有效期,单位为秒。在服务器上设置该参数之后,问题解决了。
网友评论