美文网首页
预检请求

预检请求

作者: 唐卡豆子 | 来源:发表于2019-03-09 15:16 被阅读0次
    image.png image.png image.png

    问题:每次发起请求,同一条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这个参数即可达到预期目标。该参数用来指定本次预检请求的有效期,单位为秒。在服务器上设置该参数之后,问题解决了。

    相关文章

      网友评论

          本文标题:预检请求

          本文链接:https://www.haomeiwen.com/subject/rfqkjftx.html