为了账号安全,请及时绑定邮箱和手机立即绑定

为什么发送选项请求并禁用它?

为什么发送选项请求并禁用它?

跃然一笑 2019-06-14 11:07:28
为什么发送选项请求并禁用它?我正在构建一个网络API。我发现每当我使用Chrome发布,进入我的API,总有一个选项请求发送之前,真正的请求,这是相当恼人的。目前,我让服务器忽略任何选项请求。现在我的问题是,发送选项请求以使服务器负载翻倍有什么好处?有没有办法完全阻止浏览器发送选项请求?
查看完整描述

3 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

已经经历过这个问题,下面是我对这个问题的结论和我的解决方案。

根据CORS策略(强烈建议你阅读它)如果浏览器认为需要的话,你不能强迫浏览器停止发送选项请求。

有两种方法可以解决这个问题:

  1. 确保您的请求是“简单的请求”。
  2. Access-Control-Max-Age

    对于选项请求

简单请求

一个简单的跨站点请求满足以下所有条件:

唯一允许的方法是:

  • 到达

除了由用户代理(例如连接、用户代理等)自动设置的标头外,唯一允许手动设置的标头是:

  • 接受
  • 接受语言
  • 内容语言
  • 内容-类型

内容类型标头的唯一允许值是:

  • 应用程序/x-www-表单-urlencode
  • 多部分/表格-数据
  • 文本/纯文本

一个简单的请求不会导致飞行前选项请求。

设置选项检查的缓存

您可以设置Access-Control-Max-Age对于选项请求,使其在权限过期之前不会再次检查权限。

访问控制-最大年龄提供的值,以秒为单位的响应,飞行前请求可以缓存多长时间,而不发送另一个飞行前请求。

注意到的限制

  • 对于Chrome,最大秒数为

    Access-Control-Max-Age

    600

    这是10分钟,根据

    Chrome源代码

  • Access-Control-Max-Age

    每次只对一个资源起作用,例如,

    GET

    具有相同URL路径但不同查询的请求将被视为不同的资源。因此,对第二个资源的请求仍将触发飞行前请求。


查看完整回答
反对 回复 2019-06-14
  • 3 回答
  • 0 关注
  • 414 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号