http相关面试题

1. http协议2.0有什么特点

  • 完全采用二进制格式-更稳定
  • 多路复用-单个连接可以进行多次数据的传输
  • Header压缩-http2.0维护一个字典,差量更新http头部,大大降低头部传输产生的流量
  • 服务端推送-服务端可以把index.html需要的静态资源一并发送到客户端,省去了客户端重复请求的步骤。没有发起请求,建立连接等操作,所以静态资源通过服务端推送的方式,更快
  • 请求优先级-通过把http消息分为很多独立帧,通过优化这些帧的交错和传输顺序进行优化。
    • 优先级最高:html文件
    • 优先级高:css文件
    • 优先级中:js文件
    • 优先级低:图片

参考

2. 介绍HTTPS;HTTP和HTTPS的区别(必考)

HTTPS相当于HTTP+SSL/TLS+TCP/IP

  • https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
  • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是44
    3。
  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
区别 HTTP HTTPS
协议 运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份 身披SSL外壳的HTTP,运行SSL上,SSL运行与TCP之上,是添加了加密和认证机制的HTTP
端口 80 443
资源消耗 较少 由于加解密处理,会消耗更多的 CPU 和内存资源
开销 无需证书 需要证书
加密机制 共享密钥加密和公开密钥加密并用的混合加密机制
安全性 由于加密机制,安全性强

3. 为什么说http是无状态协议,怎么解决无状态协议,用户的信息怎么传递?

  • 无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息
    也就是说,当客户端一次HTTP请求完成以后,客户端再发送一次HTTP请求,HTTP并不知道当前客户端是一个”老用户“。
  • 可以使用Cookie来解决无状态的问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“。

4. 升级https会有什么坑?

5. HTTPS加密过程方式

HTTPS通过HTTP来传输信息,但是信息通过TLS协议进行加密。其中使用到两种加密技术,分别是对称加密和非对称加密。

  • 对称加密

对称加密就是双方都有相同的秘钥,都能将密文进行加密或者解密

缺点是秘钥是通过网络传输,一旦秘钥被截获就没有加密的意义了

  • 非对称加密

非对称加密,有公钥和私钥之分,公钥所有人都可以知道,公钥用于给数据加密,但是解密必须使用私钥,私钥只有分发公钥的一方才知道。

简单流程就是服务端(实际产生两个,私钥在自己手里)把公钥给客户端,客户端创建秘钥,然后通过公钥加密并发送给服务端,服务端接收到密文以后通过私钥解密出正确的秘钥,这时候两端就都知道秘钥是什么了。

  1. 服务器端产生的是对称秘钥,所以只是把公钥发送出去,私钥一直在自己这里 (对称秘钥就是一个公钥,一个私钥,用公钥加密,用私钥直接能解码,但是比较慢,不能一直用这个通信)
  2. 客户端首先向一个权威的服务器检查证书的合法性,如果证书合法,客户端产生一段随机数,这个随机数就作为通信的密钥,我们称之为对称密钥,用公钥加密这段随机数,然后发送到服务器
  3. 服务器用密钥解密获取对称密钥,然后,双方就已对称密钥进行加密解密通信了

对称加密主要保护的就是在啊传输过程的安全性,通过公钥加密后的客户端私钥即使被拦截到,没有服务端的私钥也拿不到里面的内容,缺陷就是有加解密的操作流程,所以不能一直用这种方式进行传输。

6.tcp的长连接和http2多路复用区别?

背景:在HTTP1中,为了性能考虑,我们会引入雪碧图,将小图合并,使用多个域名等方式进行优化,是因为浏览器限制了同一个域名下的请求数量,当发起多个请求会产生队头阻塞,剩余资源需要等待其他资源请求完成后才能发起请求。

  • HTTP/1.* :一次请求,建立一次连接,用完关闭;在有请求在建立连接,完成传输后关闭;

  • 长连接:客户端和服务端可以通过keep-alive的方式完成约定,当服务端返回response后不关闭TCP连接;同样客户端在接受完报文后也不关闭连接,在下次发送请求时重用改连接。

  • 多路复用:允许只通过一个TCP连接发起多重请求,并行执行,减少了建立连接等过程,从而达到快速完成加载的目的。

并行:就是一个时间点可以做多个任务(分身术);并发:就是一个时间段能做多个任务(一分钟处理1000请求,并发量1000)

7. HTTP keep-alive

HTTP keep-alive 也称为 HTTP 长连接。它通过重用一个 TCP 连接来发送/接收多个 HTTP请求,来减少创建/关闭多个 TCP连接的开销。在http1中请求头中,默认开启keep-alive,除非显式地关闭它:

在HTTP/1.0协议中,如果请求头中包含:

// 代表开启
Connection: keep-alive

// 关闭
Connection: close

8. tcp拥塞控制和流量控制

  • 流量控制(作用于接收方):Window Size 窗口大小,表示还能接受多少字节的数据,用于流量控制
  • 拥塞处理(作用于网络): 防止过多的数据拥塞网络,避免出现网络负载过大的情况。拥塞处理包括了四个算法分别为:慢开始,拥塞避免,快速重传,快速恢复

9. 三次握手四次挥手,为什么三次和四次

三次握手:

假设 A 为客户端,B 为服务器端。

首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。(A:CLOSED    B:LISTEN)

A 向 B 发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。(A:SYN_SEND    B:LISTEN)

B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号(期待收到的下一个序号值)为 x+1,同时也选择一个初始的序号 y。(A:LISTEN    B:SYN_RECEIVED)

A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。(A:ESTABLISHED   B:SYN_RECEIVED)

B 收到 A 的确认后,连接建立。(A:ESTABLISHED    B:ESTABLISHED)

四次挥手:

A 发送连接释放报文,FIN=1。(A:FIN_WAIT1    B:ESTABLISHED)

B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。(A:FIN_WAIT_2   B:CLOSED_WAIT)

当 B 不再需要连接时,发送连接释放报文,FIN=1。(A:FIN_WAIT_2    B:LAST_ACK)

A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。(A:TIME_WAIT    B:LAST_ACK)

B 收到 A 的确认后释放连接。(B:CLOSED)

为什么三次握手:

防止失效的连接请求到达服务器,从而导致服务器错误的打开连接.

客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

为什么四次挥手:

让服务端发送未发送完的数据.

TIME_WAIT状态:
确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。

10. 七层模型-HTTP及HTTPS协议原理解析

  • 七层模型分为主机和网络两个部分

    • 主机

      • 应用层-访问网络服务的接口
      • 表示层-提供数据格式转换服务
      • 会话层-建立端连接并提供访问验证和回话管理
      • 传输层-提供应用进程之间的逻辑通信
    • 网络

      • 网络层-为数据在节点之间传输创建逻辑链路,并分组转发数据
      • 链路层-在通信的实体间建立数据链路连接
      • 物理层-为数据端设备提供原始比特流的传输的通路!\

    image

总结起来就是:
打电话信息发出(www) --->发射塔收到不稳定信息流(物理层) ---> 发射塔整理信息流(链路层)---> 发射塔转给离接收人更近的发射塔(网络层IP) ---> 发射塔向接收人发送信息(传输层TCP) ---> 通话建立(会话层) ---> 解码信息(表示层) ---> 发出声音给接收人(应用层HTTP)

各协议在HTTP中的用途

对于HTTP网络应用,我们在网络层用的是IP,在传输层用的是TCP。

  • IP: internet protocal。顾名思义,网络协议。他能确保计算机之间在网络上互相通信,但是他不检查消息是否以发送次序到达而没有损坏,因此,我们需要上一层来检验消息。于是有了TCP层
  • TCP: 保证信息正确次序,内容不变。同时引入端口分发给不同的服务。同时分割数据为更小的ip包,到达时重组。
  • HTTP: 当信息解读好,我们传给HTTP层,即为应用层。超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

参考

posted @ 2020-05-23 11:45  bonly-ge  阅读(238)  评论(0编辑  收藏  举报