相关推荐recommended
【接口测试】常见HTTP面试题
作者:mmseoamin日期:2024-04-29

目录

HTTP

GET 和 POST 的区别

GET 和 POST 方法都是安全和幂等的吗

接口幂等实现方式

说说 post 请求的几种参数格式是什么样的?

HTTP特性

HTTP(1.1) 的优点有哪些?

HTTP(1.1) 的缺点有哪些?

HTTP/1.1 的性能如何?

HTTP与HTTPS

HTTP 与 HTTPS 有哪些区别?

HTTPS 解决了 HTTP 的哪些问题?

HTTPS 是如何解决上面的三个风险的?

HTTPS 是如何建立连接的?其间交互了什么?

HTTP/1.1、HTTP/2、HTTP/3 演变

HTTP/1.1 相比 HTTP/1.0 提高了什么性能?

HTTP/2 做了什么优化?

HTTP/3 做了哪些优化?

HTTP协议

header请求头和入参都是发送到服务器他们有什么区别呢?

HTTP 协议的主要特点可概括如下:

什么是Http无状态协议?怎么解决Http协议无状态协议?

如果模块请求http 改为了 https ,测试方案应该如何制定,修改?

用常用HTTP取协议调试代理工具有什么?详细说明抓取HTTPS 协议的设置过程?

Cookie和Session token

怎么抓取HTTPS协议

http协议请求方式

HTTPS在哪一层, 会话层在第几层

什么是web缓存?有什么优点

说是https的工作流程

HTTP代理

什么是HTTP代理

二、HTTP代理的作用?


HTTP

GET 和 POST 的区别

Get 方法的含义是请求从服务器获取资源,这个资源可以是静态的文本、页面、图片视频等。

而 POST 方法则是相反操作,它向 URI 指定的资源提交数据,数据就放在报文的 body 里

GET 和 POST 方法都是安全和幂等的吗

「安全」,是指请求方法不会「破坏」服务器上的资源。

「幂等」,意思是多次执行相同的操作,结果都是「相同」的。

那么很明显 GET 方法就是安全且幂等的,因为它是「只读」操作,无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的。

POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。

接口幂等实现方式

接口幂等性是指对于同一请求,接口的返回结果应该保持一致,即使相同的请求被发送多次也不会产生副作用。它是在高并发、网络抖动等情况下保证数据一致性和服务可靠性的重要手段。

实现方式如下:

  1. 使用唯一标识符(ID):每个请求都应该包含一个唯一的标识符来确保其幂等性。当同样的请求被多次重复调用时,可以根据标识符来保证只有一个请求被处理,并且只有一份响应结果被返回。
  2. 通过检查当前状态来验证是否符合幂等性:在处理请求之前,可以检查当前系统的状态来验证是否符合幂等性。例如,在进行转账操作时,先检查账户余额是否足够。如果余额不足,则不进行交易操作,并返回已知错误码。
  3. 记录请求处理的状态:对于每个请求,记录其请求处理的状态,以确保在同一个请求未处理完成之前,不会再次处理相同的请求。
  4. 通过锁定请求来避免重复处理:在处理请求时,使用锁机制来防止同时处理相同的请求,以避免多次执行同样的操作。

综上所述,为了确保接口幂等性必须在设计接口时就考虑如何在并发请求、网络抖动等情况下保证数据的一致性和服务的可靠性。以上实现方式可以帮助系统设计者更好地实现接口幂等性。

说说 post 请求的几种参数格式是什么样的?

application/x-www-form-urlencoded

表单

multipart/form-data

文件

application/json

json

text/xml

xml

HTTP特性

HTTP(1.1) 的优点有哪些?

HTTP 最凸出的优点是「简单、灵活和易于扩展、应用广泛和跨平台」。

1. 简单

HTTP 基本的报文格式就是 header + body,头部信息也是 key-value 简单文本的形式,易于理解,降低了学习和使用的门槛。

2. 灵活和易于扩展

HTTP协议里的各类请求方法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发人员自定义和扩充。

同时 HTTP 由于是工作在应用层( OSI 第七层),则它下层可以随意变化。

HTTPS 也就是在 HTTP 与 TCP 层之间增加了 SSL/TLS 安全传输层,HTTP/3 甚至把 TCP 层换成了基于 UDP 的 QUIC。

3. 应用广泛和跨平台

互联网发展至今,HTTP 的应用范围非常的广泛,从台式机的浏览器到手机上的各种 APP,从看新闻、刷贴吧到购物、理财、吃鸡,HTTP 的应用遍地开花,同时天然具有跨平台的优越性。

HTTP(1.1) 的缺点有哪些?

HTTP 协议里有优缺点一体的双刃剑,分别是「无状态、明文传输」,同时还有一大缺点「不安全」。

1. 无状态双刃剑

无状态的好处,因为服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务。

无状态的坏处,既然服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦。

例如登录->添加购物车->下单->结算->支付,这系列操作都要知道用户的身份才行。但服务器不知道这些请求是有关联的,每次都要问一遍身份信息。

这样每操作一次,都要验证信息,这样的购物体验还能愉快吗?别问,问就是酸爽!

对于无状态的问题,解法方案有很多种,其中比较简单的方式用 Cookie 技术。

Cookie 通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。

相当于,在客户端第一次请求后,服务器会下发一个装有客户信息的「小贴纸」,后续客户端请求服务器的时候,带上「小贴纸」,服务器就能认得了了,

【接口测试】常见HTTP面试题,第1张

2. 明文传输双刃剑

明文意味着在传输过程中的信息,是可方便阅读的,通过浏览器的 F12 控制台或 Wireshark 抓包都可以直接肉眼查看,为我们调试工作带了极大的便利性。

但是这正是这样,HTTP 的所有信息都暴露在了光天化日下,相当于信息裸奔。在传输的漫长的过程中,信息的内容都毫无隐私可言,很容易就能被窃取,如果里面有你的账号密码信息,那你号没了。

3. 不安全

HTTP 比较严重的缺点就是不安全:

  • 通信使用明文(不加密),内容可能会被窃听。比如,账号信息容易泄漏,那你号没了。
  • 不验证通信方的身份,因此有可能遭遇伪装。比如,访问假的淘宝、拼多多,那你钱没了。
  • 无法证明报文的完整性,所以有可能已遭篡改。比如,网页上植入垃圾广告,视觉污染,眼没了。

    HTTP 的安全问题,可以用 HTTPS 的方式解决,也就是通过引入 SSL/TLS 层,使得在安全上达到了极致。

    HTTP/1.1 的性能如何?

    HTTP 协议是基于 TCP/IP,并且使用了「请求 - 应答」的通信模式,所以性能的关键就在这两点里。

    1. 长连接

    早期 HTTP/1.0 性能上的一个很大的问题,那就是每发起一个请求,都要新建一次 TCP 连接(三次握手),而且是串行请求,做了无谓的 TCP 连接建立和断开,增加了通信开销。

    为了解决上述 TCP 连接问题,HTTP/1.1 提出了长连接的通信方式,也叫持久连接。这种方式的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。

    持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。

    【接口测试】常见HTTP面试题,第2张

    短连接与长连接

    当然,如果某个 HTTP 长连接超过一定时间没有任何数据交互,服务端就会主动断开这个连接。

    2. 管道网络传输

    HTTP/1.1 采用了长连接的方式,这使得管道(pipeline)网络传输成为了可能。

    即可在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。

    举例来说,客户端需要请求两个资源。以前的做法是,在同一个 TCP 连接里面,先发送 A 请求,然后等待服务器做出回应,收到后再发出 B 请求。那么,管道机制则是允许浏览器同时发出 A 请求和 B 请求,如下图:

    【接口测试】常见HTTP面试题,第3张

    管道网络传输

    但是服务器必须按照接收请求的顺序发送对这些管道化请求的响应。

    注意,是按照服务端收到的请求顺序响应,并不管哪个请求是先发送的,假设客户端先发送 A 请求,后发送 B 请求,如果服务端先收到 B 请求,就先响应 B 请求,然后再响应 A 请求,但是假设处理 B 请求的时候,耗时比较长,那么请求 A 的响应就会被阻塞,这称为「队头堵塞」。

    所以,HTTP/1.1 管道解决了请求的队头阻塞,但是没有解决响应的队头阻塞。

    3. 队头阻塞

    「请求 - 应答」的模式加剧了 HTTP 的性能问题。

    因为当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一同被阻塞了,会招致客户端一直请求不到数据,这也就是「队头阻塞」,好比上班的路上塞车。

    【接口测试】常见HTTP面试题,第4张

    队头阻塞

    总之 HTTP/1.1 的性能一般般,后续的 HTTP/2 和 HTTP/3 就是在优化 HTTP 的性能。

    HTTP与HTTPS

    HTTP 与 HTTPS 有哪些区别?

    1. HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
    2. HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
    3. HTTP 的端口号是 80,HTTPS 的端口号是 443。
    4. HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

    HTTPS 解决了 HTTP 的哪些问题?

    HTTP 由于是明文传输,所以安全上存在以下三个风险:

    • 窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
    • 篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
    • 冒充风险,比如冒充淘宝网站,用户钱容易没。

      【接口测试】常见HTTP面试题,第5张

      HTTP 与 HTTPS 网络层

      HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,可以很好的解决了上述的风险:

      • 信息加密:交互信息无法被窃取,但你的号会因为「自身忘记」账号而没。
      • 校验机制:无法篡改通信内容,篡改了就不能正常显示,但百度「竞价排名」依然可以搜索垃圾广告。
      • 身份证书:证明淘宝是真的淘宝网,但你的钱还是会因为「剁手」而没。

        可见,只要自身不做「恶」,SSL/TLS 协议是能保证通信是安全的。

        HTTPS 是如何解决上面的三个风险的?

        • 混合加密的方式实现信息的机密性,解决了窃听的风险。
        • 摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
        • 将服务器公钥放入到数字证书中,解决了冒充的风险。

          1. 混合加密

          通过混合加密的方式可以保证信息的机密性,解决了窃听的风险。

          【接口测试】常见HTTP面试题,第6张

          HTTPS 采用的是对称加密和非对称加密结合的「混合加密」方式:

          • 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
          • 在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。

            采用「混合加密」的方式的原因:

            • 对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。
            • 非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢。

              2. 摘要算法

              摘要算法用来实现完整性,能够为数据生成独一无二的「指纹」,用于校验数据的完整性,解决了篡改的风险。

              【接口测试】常见HTTP面试题,第7张

              校验完整性

              客户端在发送明文之前会通过摘要算法算出明文的「指纹」,发送的时候把「指纹 + 明文」一同加密成密文后,发送给服务器,服务器解密后,用相同的摘要算法算出发送过来的明文,通过比较客户端携带的「指纹」和当前算出的「指纹」做比较,若「指纹」相同,说明数据是完整的。

              3. 数字证书

              客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

              这就存在些问题,如何保证公钥不被篡改和信任度?

              所以这里就需要借助第三方权威机构 CA (数字证书认证机构),将服务器公钥放在数字证书(由数字证书认证机构颁发)中,只要证书是可信的,公钥就是可信的。

              【接口测试】常见HTTP面试题,第8张

              数子证书工作流程

              通过数字证书的方式保证服务器公钥的身份,解决冒充的风险。

              HTTPS 是如何建立连接的?其间交互了什么?

              SSL/TLS 协议基本流程:

              • 客户端向服务器索要并验证服务器的公钥。
              • 双方协商生产「会话秘钥」。
              • 双方采用「会话秘钥」进行加密通信。

                前两步也就是 SSL/TLS 的建立过程,也就是 TLS 握手阶段。

                SSL/TLS 的「握手阶段」涉及四次通信,可见下图:

                【接口测试】常见HTTP面试题,第9张

                SSL/TLS 协议建立的详细流程:

                1. ClientHello

                首先,由客户端向服务器发起加密通信请求,也就是 ClientHello 请求。

                在这一步,客户端主要向服务器发送以下信息:

                (1)客户端支持的 SSL/TLS 协议版本,如 TLS 1.2 版本。

                (2)客户端生产的随机数(Client Random),后面用于生成「会话秘钥」条件之一。

                (3)客户端支持的密码套件列表,如 RSA 加密算法。

                2. SeverHello

                服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello。服务器回应的内容有如下内容:

                (1)确认 SSL/ TLS 协议版本,如果浏览器不支持,则关闭加密通信。

                (2)服务器生产的随机数(Server Random),也是后面用于生产「会话秘钥」条件之一。

                (3)确认的密码套件列表,如 RSA 加密算法。

                (4)服务器的数字证书。

                3.客户端回应

                客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。

                如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:

                (1)一个随机数(pre-master key)。该随机数会被服务器公钥加密。

                (2)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。

                (3)客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供服务端校验。

                上面第一项的随机数是整个握手阶段的第三个随机数,会发给服务端,所以这个随机数客户端和服务端都是一样的。

                服务器和客户端有了这三个随机数(Client Random、Server Random、pre-master key),接着就用双方协商的加密算法,各自生成本次通信的「会话秘钥」。

                4. 服务器的最后回应

                服务器收到客户端的第三个随机数(pre-master key)之后,通过协商的加密算法,计算出本次通信的「会话秘钥」。

                然后,向客户端发送最后的信息:

                (1)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。

                (2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供客户端校验。

                至此,整个 SSL/TLS 的握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用「会话秘钥」加密内容。

                HTTP/1.1、HTTP/2、HTTP/3 演变

                HTTP/1.1 相比 HTTP/1.0 提高了什么性能?

                HTTP/1.1 相比 HTTP/1.0 性能上的改进:

                • 使用 TCP 长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。
                • 支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。

                  但 HTTP/1.1 还是有性能瓶颈:

                  • 请求 / 响应头部(Header)未经压缩就发送,首部信息越多延迟越大。只能压缩 Body 的部分;
                  • 发送冗长的首部。每次互相发送相同的首部造成的浪费较多;
                  • 服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,也就是队头阻塞;
                  • 没有请求优先级控制;
                  • 请求只能从客户端开始,服务器只能被动响应。

                    HTTP/2 做了什么优化?

                    HTTP/2 协议是基于 HTTPS 的,所以 HTTP/2 的安全性也是有保障的。

                    【接口测试】常见HTTP面试题,第10张

                    HTT/1 ~ HTTP/2

                    那 HTTP/2 相比 HTTP/1.1 性能上的改进:

                    1. 头部压缩

                    HTTP/2 会压缩头(Header)如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分。

                    这就是所谓的 HPACK 算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。

                    2. 二进制格式

                    HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式,头信息和数据体都是二进制,并且统称为帧(frame):头信息帧(Headers Frame)和数据帧(Data Frame)。

                    【接口测试】常见HTTP面试题,第11张

                    HTTP/1 与 HTTP/2

                    这样虽然对人不友好,但是对计算机非常友好,因为计算机只懂二进制,那么收到报文后,无需再将明文的报文转成二进制,而是直接解析二进制报文,这增加了数据传输的效率。

                    比如状态码 200 ,在 HTTP/1.1 是用 '2''0''0' 三个字符来表示(二进制:110010 110000 110000),如图:

                    【接口测试】常见HTTP面试题,第12张

                    在 HTTP/2 是用数字 200 表示(二进制:11001000),如图:

                    【接口测试】常见HTTP面试题,第13张

                    3. 数据流

                    HTTP/2 的数据包不是按顺序发送的,同一个连接里面连续的数据包,可能属于不同的回应。因此,必须要对数据包做标记,指出它属于哪个回应。

                    在 HTTP/2 中每个请求或相应的所有数据包,称为一个数据流(Stream)。每个数据流都标记着一个独一无二的编号(Stream ID),不同 Stream 的帧是可以乱序发送的(因此可以并发不同的 Stream ),因为每个帧的头部会携带 Stream ID 信息,所以接收端可以通过 Stream ID 有序组装成 HTTP 消息

                    客户端和服务器双方都可以建立 Stream, Stream ID 也是有区别的,客户端建立的 Stream 必须是奇数号,而服务器建立的 Stream 必须是偶数号。

                    【接口测试】常见HTTP面试题,第14张

                    客户端还可以指定数据流的优先级。优先级高的请求,服务器就先响应该请求。

                    4. 多路复用

                    HTTP/2 是可以在一个连接中并发多个请求或回应,而不用按照顺序一一对应。

                    移除了 HTTP/1.1 中的串行请求,不需要排队等待,也就不会再出现「队头阻塞」问题,降低了延迟,大幅度提高了连接的利用率。

                    举例来说,在一个 TCP 连接里,服务器收到了客户端 A 和 B 的两个请求,如果发现 A 处理过程非常耗时,于是就回应 A 请求已经处理好的部分,接着回应 B 请求,完成后,再回应 A 请求剩下的部分。

                    【接口测试】常见HTTP面试题,第15张

                    多路复用

                    5. 服务器推送

                    HTTP/2 还在一定程度上改善了传统的「请求 - 应答」工作模式,服务不再是被动地响应,也可以主动向客户端发送消息。

                    比如,客户端通过 HTTP/1.1 请求从服务器那获取到了 HTML 文件,而 HTML 可能还需要依赖 CSS 来渲染页面,这时客户端还要再发起获取 CSS 文件的请求,需要两次消息往返,如下图左边部分:

                    【接口测试】常见HTTP面试题,第16张

                    img

                    如上图右边部分,在 HTTP/2 中,客户端在访问 HTML 时,服务器可以直接主动推送 CSS 文件,减少了消息传递的次数。

                    HTTP/2 有什么缺陷?

                     

                    HTTP/2 通过 Stream 的并发能力,解决了 HTTP/1 队头阻塞的问题,看似很完美了,但是 HTTP/2 还是存在“队头阻塞”的问题,只不过问题不是在 HTTP 这一层面,而是在 TCP 这一层。

                    HTTP/2 是基于 TCP 协议来传输数据的,TCP 是字节流协议,TCP 层必须保证收到的字节数据是完整且连续的,这样内核才会将缓冲区里的数据返回给 HTTP 应用,那么当「前 1 个字节数据」没有到达时,后收到的字节数据只能存放在内核缓冲区里,只有等到这 1 个字节数据到达时,HTTP/2 应用层才能从内核中拿到数据,这就是 HTTP/2 队头阻塞问题。

                    举个例子,如下图:

                    【接口测试】常见HTTP面试题,第17张

                    img

                    图中发送方发送了很多个 packet,每个 packet 都有自己的序号,你可以认为是 TCP 的序列号,其中 packet 3 在网络中丢失了,即使 packet 4-6 被接收方收到后,由于内核中的 TCP 数据不是连续的,于是接收方的应用层就无法从内核中读取到,只有等到 packet 3 重传后,接收方的应用层才可以从内核中读取到数据,这就是 HTTP/2 的队头阻塞问题,是在 TCP 层面发生的。

                    所以,一旦发生了丢包现象,就会触发 TCP 的重传机制,这样在一个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。

                    HTTP/3 做了哪些优化?

                    前面我们知道了 HTTP/1.1 和 HTTP/2 都有队头阻塞的问题:

                    • HTTP/1.1 中的管道( pipeline)虽然解决了请求的队头阻塞,但是没有解决响应的队头阻塞,因为服务端需要按顺序响应收到的请求,如果服务端处理某个请求消耗的时间比较长,那么只能等相应完这个请求后, 才能处理下一个请求,这属于 HTTP 层队头阻塞。
                    • HTTP/2 虽然通过多个请求复用一个 TCP 连接解决了 HTTP 的队头阻塞 ,但是一旦发生丢包,就会阻塞住所有的 HTTP 请求,这属于 TCP 层队头阻塞。

                      HTTP/2 队头阻塞的问题是因为 TCP,所以 HTTP/3 把 HTTP 下层的 TCP 协议改成了 UDP!

                      【接口测试】常见HTTP面试题,第18张

                      HTTP/1 ~ HTTP/3

                      UDP 发生是不管顺序,也不管丢包的,所以不会出现像 HTTP/2 队头阻塞的问题

                      大家都知道 UDP 是不可靠传输的,但基于 UDP 的 QUIC 协议 可以实现类似 TCP 的可靠性传输。

                      QUIC 有以下 3 个特点。

                      1、无队头阻塞

                      QUIC 协议也有类似 HTTP/2 Stream 与多路复用的概念,也是可以在同一条连接上并发传输多个 Stream,Stream 可以认为就是一条 HTTP 请求。

                      QUIC 有自己的一套机制可以保证传输的可靠性的。当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响,因此不存在队头阻塞问题。这与 HTTP/2 不同,HTTP/2 只要某个流中的数据包丢失了,其他流也会因此受影响。

                      所以,QUIC 连接上的多个 Stream 之间并没有依赖,都是独立的,某个流发生丢包了,只会影响该流,其他流不受影响。

                      【接口测试】常见HTTP面试题,第19张

                      2、更快的连接建立

                      对于 HTTP/1 和 HTTP/2 协议,TCP 和 TLS 是分层的,分别属于内核实现的传输层、openssl 库实现的表示层,因此它们难以合并在一起,需要分批次来握手,先 TCP 握手,再 TLS 握手。

                      HTTP/3 在传输数据前虽然需要 QUIC 协议握手,这个握手过程只需要 1 RTT,握手的目的是为确认双方的「连接 ID」,连接迁移就是基于连接 ID 实现的。

                      但是 HTTP/3 的 QUIC 协议并不是与 TLS 分层,而是QUIC 内部包含了 TLS,它在自己的帧会携带 TLS 里的“记录”,再加上 QUIC 使用的是 TLS/1.3,因此仅需 1 个 RTT 就可以「同时」完成建立连接与密钥协商,如下图:

                      【接口测试】常见HTTP面试题,第20张

                      TCP HTTPS(TLS/1.3) 和 QUIC HTTPS

                      甚至,在第二次连接的时候,应用数据包可以和 QUIC 握手信息(连接信息 + TLS 信息)一起发送,达到 0-RTT 的效果。

                      3、连接迁移

                      基于 TCP 传输协议的 HTTP 协议,由于是通过四元组(源 IP、源端口、目的 IP、目的端口)确定一条 TCP 连接,那么当移动设备的网络从 4G 切换到 WIFI 时,意味着 IP 地址变化了,那么就必须要断开连接,然后重新建立连接。而建立连接的过程包含 TCP 三次握手和 TLS 四次握手的时延,以及 TCP 慢启动的减速过程,给用户的感觉就是网络突然卡顿了一下,因此连接的迁移成本是很高的。

                      而 QUIC 协议没有用四元组的方式来“绑定”连接,而是通过连接 ID来标记通信的两个端点,客户端和服务器可以各自选择一组 ID 来标记自己,因此即使移动设备的网络变化后,导致 IP 地址变化了,只要仍保有上下文信息(比如连接 ID、TLS 密钥等),就可以“无缝”地复用原连接,消除重连的成本,没有丝毫卡顿感,达到了连接迁移的功能。

                      所以, QUIC 是一个在 UDP 之上的伪 TCP + TLS + HTTP/2 的多路复用的协议。

                      【接口测试】常见HTTP面试题,第21张

                      QUIC 是新协议,对于很多网络设备,根本不知道什么是 QUIC,只会当做 UDP,这样会出现新的问题,因为有的网络设备是会丢掉 UDP 包的,而 QUIC 是基于UDP 实现的,那么如果网络设备无法识别这个是 QUIC 包,那么就会当作 UDP包,然后被丢弃。

                      所以,HTTP/3 现在普及的进度非常的缓慢,不知道未来 UDP 是否能够逆袭 TCP。

                      HTTP协议

                      header请求头和入参都是发送到服务器他们有什么区别呢?

                      首先,它们确实都是发送到服务器里的参数,但它们是有区别的,

                      header里存放的参数一般存放的是一些校验信息,比如cookie,它是为了校验这个请求是否有权限请求服务器,如果有,它才能请求服务器,然后把请求地址连同入参一起发送到服务器,然后服务器会根据地址和入参来返回出参。也就是说,服务器是先接受header信息进行判断该请求是否有权限请求,判断有权限后,才会接受请求地址和入参的。

                       

                      HTTP 协议的主要特点可概括如下:

                      1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。

                      2.灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记。

                      3.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

                      4.无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快

                      什么是Http无状态协议?怎么解决Http协议无状态协议?

                      (1)、无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息

                      (2)、无状态协议解决办法: 通过1、Cookie 2、通过Session会话保存。

                      如果模块请求http 改为了 https ,测试方案应该如何制定,修改?

                      当将模块请求从 HTTP 改为 HTTPS 时,测试方案需要进行相应的修改,以确保对新的协议进行充分测试。以下是可能的测试方案和修改建议:

                      功能测试:

                      • 测试确保模块在切换到 HTTPS 后,功能正常。
                      • 确保模块在使用 HTTPS 时能够正确发送和接收数据。

                        性能测试:

                        • 测试 HTTPS 请求与响应之间的性能表现,包括连接建立时间、SSL/TLS 握手时间和数据传输速度等。
                        • 确保切换到 HTTPS 后,性能不会受到过大的影响。

                          兼容性测试:

                          • 测试确保模块在不同浏览器和设备上对 HTTPS 的兼容性,包括移动设备和桌面设备。
                          • 确保模块在使用 HTTPS 时不会出现兼容性问题。

                            自动化测试:

                            • 更新自动化测试用例,确保能够正确覆盖模块切换到 HTTPS 后的各项功能和行为。
                            • 确保自动化测试脚本能够正确处理 HTTPS 请求和响应。

                              回归测试:

                              • 针对已有的功能和模块进行回归测试,确保切换到 HTTPS 后不会引入新的问题或错误。

                                报告和文档更新:

                                • 更新测试报告和相关文档,记录模块切换到 HTTPS 后的测试结果和发现。

                                  用常用HTTP取协议调试代理工具有什么?详细说明抓取HTTPS 协议的设置过程?

                                  Fiddler 是一个 http 协议调试代理工具

                                  打开Fiddler,进入 Tools-Options-HTTPS,配置允许抓取 HTTPS 连接和解析 HTTPS 流量然后选择要解释的来源,设置是否忽略服务证书错误(这些操作做完之后,在浏览器方位IP:8888,安装证书就可以在浏览器抓取HTTPS协议了)

                                  Cookie和Session token

                                  cookie、session与token的真正区别_cookie session token-CSDN博客

                                  HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session 和 Cookie 的主要目的就是为了弥补 HTTP 的无状态特性。

                                  session

                                  当用户打开一个web应用时,服务器变产生一次session,然后通过这个session将用户的信息保存在服务器,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。

                                  ==>由于HTTP是无状态的,即服务器不知道用户上一次做了什么,默认也无法识别用户身份。

                                  cookie

                                  cookie是保存在本地终端的数据。cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间(4K大小),所以每个域的cookie数量是有限的。

                                  会话管理:登陆、购物车、游戏得分或者服务器应该记住的其他内容

                                  个性化:用户偏好、主题或者其他设置

                                  追踪:记录和分析用户行为

                                  token

                                  token的意思是“令牌”,是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。还可以把不变的参数也放进token,避免多次查库

                                  因为http协议是无连接,无状态的。简单来说就是为了节省服务器资源,客户端和服务端无法保持长时间连接,所以服务端无法记住该用户的状态。所以引入了鉴权机制。

                                  1. 用户在第一次登陆时,服务器会生成cookies给客户端,第二次登陆时客户端会带着之前的cookies来访问,这样服务端就可以判断是哪一个用户。

                                  2. session是保存在服务端的,当用户登录时会生成session id保存在数据库,下次用户登录就可以识别该session进行判断是哪个用户。

                                  3. token是另一种鉴权机制,跟cookies类似是由服务端生成token给到客户端,下次登录时或者调其它接口带上该token就可以判断出是哪个用户。

                                  怎么抓取HTTPS协议

                                  利用fiddler抓包工具抓取

                                  http协议请求方式

                                  1. GET:用于从服务器获取资源。GET请求应该是幂等的,即多次执行相同的GET请求应该返回相同的结果,不应该对服务器产生副作用。
                                  2. POST:用于向服务器提交数据,并在服务器上创建新的资源。POST请求可能会对服务器产生副作用,例如在数据库中创建新的记录。POST请求不是幂等的,多次执行相同的POST请求可能会导致多个相同的资源被创建。
                                  3. PUT:用于向服务器上传文件,或者用于完全替换服务器上的资源。PUT请求也可以用于创建新的资源,但必须具备指定资源的唯一标识符。PUT请求是幂等的,多次执行相同的PUT请求应该得到相同的结果。
                                  4. PATCH:类似于PUT请求,但是用于更新服务器上的部分资源。PATCH请求包含要应用于资源的部分更新。
                                  5. DELETE:用于删除服务器上的资源。DELETE请求用于删除指定的资源。
                                  6. HEAD:类似于GET请求,但是只返回资源的头部信息,不返回实际的资源内容。HEAD请求常用于获取资源的元数据或检查资源是否存在。
                                  7. OPTIONS:用于获取服务器支持的请求方法和其他功能。OPTIONS请求可以用于跨域资源共享(CORS)预检请求,以确定是否允许发送实际请求。

                                  HTTPS在哪一层, 会话层在第几层

                                  HTTPS在OSI参考模型中位于传输层和应用层之间,通常被归类为安全层或加密层。HTTPS使用Transport Layer Security(TLS)或Secure Sockets Layer(SSL)协议来提供加密和认证功能,以保护数据在网络上的传输过程中不被篡改或窃听。

                                  会话层是OSI参考模型中第5层,位于表示层和传输层之间。它的主要功能是为多个应用程序之间的通信建立和管理会话。会话层通常对应于TCP/IP参考模型中的传输层和应用层之间的部分,负责建立连接并在连接中交换数据。

                                  需要注意的是,OSI参考模型和TCP/IP参考模型有所不同,它们在层次结构和功能上存在一些差异。在TCP/IP参考模型中,TLS/SSL协议通常被视为安全层而非应用层,因此它们在TCP/IP参考模型中位于应用层之下,与传输层紧密关联。

                                  什么是web缓存?有什么优点

                                  web缓存(HTTP缓存) ,是用于临时存储(缓存)web文档(html页面、图形等),以减少服务器延迟的一种信息技术。web缓存会保存web文档的副本,如果满足某些条件,则可以通过缓存满足后续请求。

                                  优点:减轻服务器压力,减少数据传输,节省网络带宽和浏览,缩短页面加载时间,提升用户体验。

                                  说是https的工作流程

                                  1. 建立安全连接:

                                    • 客户端通过在请求的URL中使用https://而不是http://来发起安全连接。
                                    • 客户端与服务器开始SSL/TLS握手过程,这个过程包括密钥交换、服务器身份验证以及协商加密算法等。
                                  2. 服务器身份验证:

                                    • 服务器向客户端提供其SSL/TLS证书,该证书包含了服务器的公钥以及证书颁发机构(CA)的签名。
                                    • 客户端验证服务器证书的有效性(检查证书是否由受信任的CA签名,证书是否过期等)。
                                  3. 密钥交换和加密协商:

                                    • 一旦服务器被认证,客户端和服务器协商生成一个或多个对称密钥,用于会话期间的数据加密。
                                    • 密钥交换过程中,客户端使用服务器的公钥加密信息,只有持有对应私钥的服务器才能解密,确保了密钥交换过程的安全性。
                                  4. 加密通信:

                                    • 使用协商的对称密钥,客户端和服务器之间的通信数据将被加密,保证数据传输过程的隐私和安全。
                                    • 之后的HTTP请求和响应都将在这个加密的通道上进行。
                                  5. 关闭连接:

                                    • 数据传输完成后,连接可以被安全关闭,同时终止当前的加密会话。

                                  HTTP代理

                                  什么是HTTP代理

                                  HTTP代理是 作为客户端和服务器之间的中间商,可以帮助客户端处理HTTP请求和响应。HTTP代理可以拦截请求和响应,对它们进行修改和过滤,并且可以缓存数据以提高性能。

                                  HTTP代理可以分为两种类型:正向代理和反向代理。正向代理将请求转发到服务器,并将服务器的响应返回给客户端,而反向代理则将请求转发到客户端,并将客户端的响应返回给服务器。

                                  HTTP代理可以用于多种用途,例如提高网络性能、保护客户端隐私和安全、过滤广告和恶意软件等。在软件开发中,HTTP代理还可以用于测试和调试应用程序,以及实现负载均衡和反向代理等功能。

                                  【接口测试】常见HTTP面试题,第22张

                                  【接口测试】常见HTTP面试题,第23张

                                  二、HTTP代理的作用?

                                  HTTP代理的作用包括但不限于以下三个方面:

                                  提高网络访问速度:HTTP代理可以通过缓存数据和优化网络连接来提高网络访问速度。当客户端发送请求时,HTTP代理可以将之前请求过的数据缓存起来,当再次请求时,就可以直接从缓存中获取数据,从而减少网络访问时间。

                                  保护客户端隐私和安全:HTTP代理可以作为客户端和服务器之间的中间商,帮助客户端处理HTTP请求和响应,从而保护客户端的隐私和安全。例如,HTTP代理可以帮助客户端隐藏真实IP地址,避免被服务器识别和追踪。

                                  过滤广告和恶意软件:HTTP代理可以拦截请求和响应,对它们进行过滤和修改,从而过滤广告和恶意软件。例如,一些浏览器插件和防火墙软件可以使用HTTP代理来过滤广告和恶意软件,提高浏览效率和安全性。

                                  总之,HTTP代理在提高网络访问速度、保护客户端隐私和安全、过滤广告和恶意软件等方面具有重要的作用。