由一个“两次请求”引出的Web服务器跨域请求访问问题的解决方案
来源:互联网 发布:乐视tv电视直播软件 编辑:程序博客网 时间:2024/04/29 09:31
我们公司的项目都是前后端分离的,上线几个月以来,发现一个很奇怪的问题,每次前端发起请求,通过浏览器的开发者工具都能看到在Network下同一个url有两条请求,第一条请求的Method为OPTIONS,第二条请求的Method才是真正的GET或者POST,并且,第一条请求无数据返回,第二条请求才会返回正常的数据。
发现这个问题之后,立即组织搜索问题产生的原因以及解决方案。在网上搜索了大量资料,得到的一个结论是:第一个OPTIONS的请求是由Web服务器处理跨域访问引发的。网上资料显示,OPTIONS是一种“预检请求”,浏览器在处理跨域访问的请求时如果判断请求为复杂请求,则会先向服务器发送一条预检请求,根据服务器返回的内容浏览器判断服务器是否允许该请求访问。如果web服务器采用cors的方式支持跨域访问,在处理复杂请求时这个预检请求是不可避免的。
查询代码发现,我们的web服务器确实采用的是cors来解决跨域访问的问题,并且我们在header中添加了自定义参数,导致我们的每次请求都为复杂请求,从而产生了每次请求都会发送两条请求的现象。
问题的原因找到了,就要想办法解决这个问题。既然浏览器在处理复杂请求时,不可避免的要发送预检请求,那么能否减少预检请求的次数呢?比如,预检一次设置一个有效期,在有效期内不再重复预检。顺着这个思路,继续搜索相关资料,最终发现设置Access-Control-Max-Age这个参数即可达到预期目标。该参数用来指定本次预检请求的有效期,单位为秒。在服务器上设置该参数之后,问题解决了,大快人心!!!
参考资料:http://blog.csdn.net/charleslei/article/details/51906635
- 由一个“两次请求”引出的Web服务器跨域请求访问问题的解决方案
- 记一次Spring MVC 一次请求,后台却访问两次的问题的解决方案
- 关于前端跨域 一次动作 两次请求的问题
- 遇到问题---web访问超长时间操作请求时方法会自动运行两次--nginx自动重试导致的post提交两次
- struts2下请求两次的问题
- 【安卓】volley请求两次的问题
- 由一个性能问题引出的.net概念
- 由C++ assign()函数引出的一个问题
- web服务器的post请求
- 浏览器刷新页面后向服务器发出两次请求的问题
- 一个web请求的写法
- 一个web请求的过程
- ajax跨域请求问题中xhr2的解决方案
- ajax跨域请求问题中xhr2的解决方案
- (Ext / Js) ajax 跨域请求发送两次解决方案
- 由一道题引出的C++位域问题
- 由Struct 嵌套定义引出的问题
- 由OpenSessionInView引出的List复制问题
- org.apache.ibatis.binding.BindingException: Type interface dxm.com.mapper.UserMapper is not known to
- 关于where的条件查询in
- 使用WordPress快速搭建企业网站
- 我们对入口函数之前可以做什么
- yii框架上传(含model层)
- 由一个“两次请求”引出的Web服务器跨域请求访问问题的解决方案
- List And ArrayList
- mac 安装pod步骤记录
- 文章标题
- 洛谷 3390 矩阵快速幂
- activity中点击系统音量键无法调节大小
- dll工程下载
- Zoookeeper_Java API操作zookeeper 通过zookeeper.jar
- 透析维护服务器安全的技巧