预检请求

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在spring cloud的Zuul服务网关的过滤器中,项目中使用JWT权限验证,前端JS为了兼容跨域请求,使用A...
    GZ太阳雨阅读 4,202评论 0 0
  • 引用自HTTP访问控制(CORS) 当 Web 资源请求由其它域名或端口提供的资源时,会发起跨域 HTTP 请求(...
    有涯逐无涯阅读 7,374评论 0 4
  • 题目1.什么是同源策略? 同源策略(Same origin Policy): 浏览器出于安全方面的考虑,只允许与本...
    FLYSASA阅读 5,699评论 0 6
  • 01 今天被女儿,一直追问:“妈妈,你小时候的愿望是什么?” 歪着头想了半天,我也没觉得自己有什么特别大的愿望。 ...
    精灵儿飞阅读 3,199评论 2 8
  • 水培蒜苗第一篇 儿子喜欢吃蒜苗炒鸡蛋,他说要自己种蒜苗,不但可以写观察日记,而且,不久后我们还能吃...
    seafoot阅读 4,075评论 0 1