测试大姐提了个bug,为什么你多了个options请求?

这篇具有很好参考价值的文章主要介绍了测试大姐提了个bug,为什么你多了个options请求?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 下班前的寂静

刚准备下班呢,测试大姐又给我提个bug,你看我这就操作了一次,network里咋有两个请求?

我心一惊,”不可能啊!我代码明明就调用一次后端接口,咋可能两个请求!“。打开她的截图一看:多个options请求。

我不慌不忙解释道:”这不用管,是浏览器默认发送的一个预检请求“。

可测试大姐好像依旧很执着:“那这可肯定不行啊,明明一次请求,干嘛要两次呢,这不是增大服务端压力吗?”

“md,真固执啊,那就不下班了,加个钟给你讲懂!”

HTTP请求分为两种:

  • 简单请求
  • 非简单请求

2 简单请求

2.1 条件

  • 请求方式:HEADGETPOST

  • header中只能包含以下请求头字段:

    • Accept

    • Accept-Language

    • Content-Language

    • Content-Type所指的媒体类型值仅仅限于下列三者之一

      • text/plain
      • multipart/form-data
      • application/x-www-form-urlencoded

2.2 浏览器的不同处理方式

简单请求,若请求跨域,浏览器会放行让请求发出。浏览器会发cors请求,并携带origin。此时不管服务端返回啥,浏览器都会把返回拦截,并检查返回的responseheader中有无Access-Control-Allow-Origin

  • 这头部信息的值通常为请求的Origin值,表示允许该来源的请求说明资源是共享的,可以拿到
  • 如果Origin头部信息的值为"*"(表示允许来自任何来源的请求)但这种情况下需要谨慎使用,因为它存在安全隐患
  • 如没有这个头信息,说明服务端没有开启资源共享,浏览器会认为这次请求失败终止这次请求,并且报错。

3 非简单请求

只要不满足简单请求的条件,都是非简单请求。

发出非简单cors请求,浏览器会做一个http的查询请求(预检请求)即optionsoptions请求会按照简单请求来处理。

为啥要做一次options请求?

检查服务器是否支持跨域请求,并确认实际请求的安全性。预检请求是为保护客户端的安全,防止不受信任网站利用用户浏览器向其他网站发恶意请求。 预检请求头中除了携带了origin字段还包含两个特殊字段:

  • Access-Control-Request-Method: 告知服务器实际请求使用的HTTP方法

  • Access-Control-Request-Headers:告知服务器实际请求所携带的自定义首部字段

如:

OPTIONS /resources/post-here/ HTTP/1.1
Host: bar.other
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Origin: http://foo.example
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type

以上报文中就可以看到,使用OPTIONS请求,浏览器根据上面的使用的请求参数来决定是否需要发送,这样服务器就可以回应是否可以接受用实际的请求参数来发送请求。

-Access-Control-Request-Method告知服务器,实际请求将使用 POST 方法

Access-Control-Request-Headers告知服务器,实际请求将携带两个自定义请求标头字段:X-PINGOTHERContent-Type。服务器据此决定,该实际请求是否被允许。

啥时触发预检请求?

  1. 发送跨域请求时,请求头中包含了一些非简单请求的头信息,如自定义头(custom header)
  2. 发送跨域请求时,使用了 PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH等请求方法

“大姐你听懂了吗?所以这不是 bug,赶紧把它关掉吧!”

大姐漏出了澄澈的目光,好吧

4 上案例

测试大姐提了个bug,为什么你多了个options请求?

测试大姐提了个bug,为什么你多了个options请求?

这下测试大姐终于半信半疑地关闭了Bug。

5 假如世上没有测试大姐

我说假如啊!你的测试老大姐就是说:我不懂你说的这些,我不管,反正我现在想看到的是在浏览器里面只有一次网络请求,你自己看着办吧,bug 我留在这了,你自己处理!

爱!浏览器厂商为了保证安全性,禁止了跨域,可最终还是程序员承受了所有优化的代价!

本文由博客一文多发平台 OpenWrite 发布!文章来源地址https://www.toymoban.com/news/detail-694156.html

到了这里,关于测试大姐提了个bug,为什么你多了个options请求?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么需要自动化测试

    自动化的优势: 1.自动化可以代替手工大量地重复的工作,测试可以把大量的时间放在用例设计和新功能上边 2.自动化可以大量提升回归测试效率,特别适合敏捷开发 3.自动化可以大量地利用无人值守的时间去执行用例,特别适合非工作是爱你执行测试,工作时间分析测试用

    2024年02月13日
    浏览(52)
  • 软件为什么要进行性能压力测试?

    软件为什么要进行性能压力测试?随着软件应用的不断增多和复杂度的提高,软件的性能对用户体验和业务成功至关重要。性能问题可能导致软件运行缓慢、崩溃或无响应,给用户带来不便甚至损失。为了确保软件能够在高负载和压力下正常运行,性能压力测试变得至关重要

    2024年02月13日
    浏览(42)
  • 为什么要自动化Web测试?

    Web自动化是更快地实现所需结果的较佳方式。自动化测试在市场上引起了巨大的轰动。此软件测试过程可以让您使用正确的自动化测试工具和技术集自动执行测试过程。我们执行它是为了检查软件应用程序是否具有完全按照我们希望它执行的方式执行的勇气。 比以往更快地获

    2024年02月13日
    浏览(35)
  • python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)

    上一篇和大家一起科普扫盲接口后,知道什么是接口,接口类型等,对其有了大致了解之后,我们就回到主题-接口测试。 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的

    2024年02月10日
    浏览(45)
  • 为什么用Selenium做自动化测试

    手工操作点点点借助的是人脑的反应和聪明,为什么不用手点了呢?手会酸,脑子会累,会占据太多的时间。想一想为什么会学习自动化测试。我们都希望通过工具来解放我们的双手,大脑,眼睛。 自动化是指机器设备、系统或过程(生产、管理过程)在没有人或较少人的直

    2024年01月21日
    浏览(43)
  • 为什么要分训练集和测试集?

    分离训练集和测试集是机器学习和深度学习中常用的一种实践方法,它的主要目的是评估模型的性能和泛化能力。 以下是为什么要分训练集和测试集的几个原因: 评估模型性能:通过将数据集分为训练集和测试集,可以使用训练集来训练模型,并使用测试集来评估模型在未

    2024年02月03日
    浏览(27)
  • 为什么要写测试用例,测试用例写给谁看?

    “为什么要编写测试用例,测试用例写给谁看”,这个问题看似简单,但却涵盖了一系列复杂的考虑因素,并不太好回答。 为了向各位学测试的同学们解释清楚“为什么编写测试用例是至关重要的”,我将通过以下5个方面进行展开: 1、为什么要写测试用例? 2、测试用例写

    2024年02月05日
    浏览(31)
  • 职场经验、为什么程序员一定要写单元测试?

    2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)_软件测试刷题小程序-CSDN博客 文章浏览阅读2.5k次,点赞85次,收藏11次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、

    2024年02月21日
    浏览(47)
  • 深度学习过程中测试准确率先上升后下降是为什么?

    很典型的过拟合问题。 在训练过程中的验证准确率前上升,后下降,即在验证集上的表现先好后差。 数据相对模型来说比较简单,即模型的表达能力过剩。在初始训练阶段,模型逐渐开始学习到一些信息,因而在验证集上的表现是提升的,在到达某一点后,模型接着训练则

    2024年02月11日
    浏览(29)
  • 企业为什么要做自动化测试?我们该如何学习自动化测试?

    作为一名大厂测试开发,编写自动化脚本,俨然成为一种必备的技能。 为什么要做自动化测试? 那企业或者是我们测试人员为什么要做自动化测试呢? 如果在前两年,可能10个测试员有6个都是做的功能测试,但随着测试技术的发展以及测试工作的深入,传统的手工测试已经

    2024年02月10日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包