HTTP 与 HTTPS

HTTP 是什么?

  • 超文本传输协议
  • 从网络传输超文本内容到本地浏览器的协议,保证高效准确的传送超文本内容

    HTTPS 是什么?

  • 在 HTTP 协议的基础上,添加 SSL/TLS 协议,让数据加密传输

    SSL/TLS 是什么?

  • 传输层安全协议

  • 防止运输内容被篡改和偷窥

    HTTP 的请求过程

  1. 客户端发送请求到服务器
  2. 服务器接收请求,解析、处理请求
  3. 服务器将处理结果返回给客户端

    HTTP 协议中长连接与短链接的区别

  • HTTP 1.0 中默认是短链接,通过 keep-alive 告诉服务器建立长连接
  • HTTP 1.1 中默认长连接,即 Connection: keep-alive

    HTTP 1.1 和 HTTP 2.0的区别

    区别一:多路复用

  • HTTP 1.1 不支持多路复用

  • HTTP 2.0 支持多路复用
  • 多路复用,允许同一个连接并发处理多个请求

    区别二:数据压缩

  • HTTP 1.1 不支持 header 数据的压缩,每次都需要重复发送

  • HTTP 2.0 支持 header 数据的压缩,,采用了 HPACK 头部压缩算法对 Header 进行压缩

    区别三:服务器推送

  • HTTP 2.0 独有

  • 当用户的浏览器和服务器在建立连接后,服务器主动将一些资源推送给浏览器并缓存起来的机制
  • 有了缓存,当浏览器想要访问已缓存的资源的时候就可以直接从缓存中读取了

    HTTP 和 HTTPS 的区别

  • HTTPS 需要到 CA 申请证书

  • HTTP 运行在 TCP 上,传输的内容都是明文的
  • HTTPS 运行在 SSL/TLS 上,而 SSL/TLS 运行在 TCP 上,传输的内容都是密文的
  • 连接方式不同
  • 运行端口不同,HTTP 是 80,HTTPS 是443
  • HTTPS 可以有效的防止运营商劫持,解决了防劫持的一个大问题

    Session 与 Cookie

    解决 HTTP 无状态的问题

  • Session、Cookie 就可以记录用户状态信息,解决无状态的问题

    Session 的作用

  • 数据保存在服务端

  • 用来保存用户的 Session 信息,安全性较高

    Cookie 的作用

  • 数据保存在客户端(浏览器)

  • 减轻服务器压力,但是安全性较低,容易进行 cookies 欺骗
  • 浏览器在下次访问网页时会自动附带上它发送给服务器
  • 服务器通过识别 Cookies 并鉴定出是哪个用户
  • 然后再判断用户是否是登录状态,进而返回对应的响应

    Cookie 的种类

  • 会话 Cookie:从打开浏览器到关闭浏览器理解成一个会话,会话 Cookie 的有效期仅在浏览器打开期间生效,它存储在浏览器内存中;关闭浏览器后再次打开浏览器访问相同的页面需要重新登录

  • 持久 Cookie:它存在客户端本地硬盘中,不受浏览器关闭影响,关闭浏览器后再次打开浏览器访问相同的页面还能继续使用该 Cookie,无需再次登录,用于长久保持用户登录态

    不同种类 Cookie 的使用场景

  • 会话Cookie:信息敏感程度高的,如银行、机密信息、企业邮箱等网站

  • 持久Cookie:可勾选自动登录、30天内自动登录的网站就是持久 Cookie

    TCP/IP

    IP 是什么?

  • 网络层协议

  • 计算机用来相互识别,进行通信的一种机制,每台计算机都有一个 IP 用来在 Internet 上标识这台计算机
  • IP 地址的组成:网络号段+主机号段

    TCP 是什么?

  • 传输层协议

  • 应用程序之间的通信协议
  • TCP 确保数据包以正确的次序到达,并且尝试确认数据包的内容没有改变

    什么是 ARP 协议?

  • 一种用以解析地址的协议,根据通信方的 IP 地址可以反查出对应的MAC地址

    TCP/IP 是什么?

  • TCP 和 IP 两个协议在一起协同工作,有上下层次的关系

  • TCP 负责将数据分割并装入 IP 包,IP 负责将包发送至接受者

    UDP 和 TCP 的区别是什么?

    | TCP | UDP | | —- | —- | | 面向连接 | 无连接,发送数据之前不需要建立连接 | | 提供可靠的服务 | 提供的服务不一定可靠 | | 面向字节流 | 面向报文 | | 拥塞控制 | 没有拥塞控制
    对实时应用很有用,如实时视频会议,允许报文丢失的场景 | | 头部开销20-60个字节 | 头部开销小,只有 8 个字节 | | 全双工的可靠信道 | 不可靠信道 | | 先发送的数据先到达 | 不能保证先发送的数据先到达 |

HTTP、TCP 、IP 协议的关系

  • HTTP 的长连接和短连接本质上是 TCP 长连接和短连接
  • HTTP 是应用层协议,在传输层使用 TCP 协议,在网络层使用 IP 协议
  • IP 协议主要解决网络路由和寻址的问题
  • TCP 协议主要解决如何在 IP 层上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且顺序和发送顺序一致

    OSI 模型

    OSI 的七层模型

  1. 应用层
  2. 表示层
  3. 会话层
  4. 传输层
  5. 网络层
  6. 数据链路层
  7. 物理层

    TCP/IP 的四层模型

  8. 应用层

  9. 传输层
  10. 网络层
  11. 网络接口层(物理层+数据链路层)

    应用层常见的协议

  • HTTP、HTTPS
  • POP3:离线接收邮件协议
  • SMTP:简单邮件传输协议
  • MIME:用于互联网邮件,可附加多媒体数据

    HTTP 的应用

    发送一个 http 请求的完整过程

  1. 假设是访问域名,DNS 会负责域名解析,返回服务器的IP地址
  2. 客户端访问服务器,与服务器通过三次握手建立连接
  3. 客户端发送一个 HTTP 请求给服务器,可能会经过安全层,网关层(比如 nginx 或者k8s 的 ingress),再到服务层
  4. 服务端收到 HTTP 请求后,处理请求
  5. 服务端返回响应内容
  6. 客户端收到响应内容,解析响应内容
  7. 客户端渲染响应内容
  8. 如果没有设置长连接,那么会四次挥手断连,HTTP1.1 默认有长连接

    用 TCP/IP 四层模型解释发送 HTTP 请求的过程

  9. 客户端在应用层(http 协议)发送一个 http 请求

  10. 传输层(tcp 协议)将从应用层收到的数据(http 请求报文)进行分割,并在各个报文上打上序号和端口号再转发给网络层
  11. 网络层(ip 协议)将报文增加通信目的地的 MAC 地址后转发给链路层
  12. 数据链路层将收到的数据传到服务器的网络层

    TCP 三次握手流程

  13. 客户端请求服务器,询问服务器是否能收到客户端的请求

  14. 服务器响应客户端收到请求并同意连接,询问客户端是否能收到服务器的响应
  15. 当客户端收到服务端发来的连接同意应答后,向服务器确认已收到响应,开始建立连接

    TCP 四次挥手流程

  16. 客户端向服务器发送断开连接的请求

  17. 服务器收到断开连接的请求只会回复客户端,表示已经收到断开请求
  18. 服务器在确认断开前,会先确认所有传输到客户端的数据是否已经传输完毕,确认数据传输完毕后才进行断开
  19. 客户端收到服务器发来的断开连接数据包后,回复服务器,表示收到了断开连接数据包

    请求方法

    常见的请求方法:get、post、delete、put、patch

    一个请求由什么组成?

  • 请求行(General):包含请求类型、请求 url 等
  • 请求头(Request Headers):Content-type、Cookie 等
  • 请求数据(Request body):需要提交的数据,GET 请求则空

    常见的 Content-type

  • text/html:HTML 格式

  • application/json:序列化 JSON 数据
  • application/x-www-form-urlencoded:表单数据
  • multipart/form-data:表单文件上传

    一个响应由什么组成?

  • 响应状态码(Response Status Code)

  • 响应头(Response Headers)
  • 响应体(Response Body)

这部分详见HTTP报文详解

CDN

CDN 的作用

  • 内容分发网络
  • CDN 是构建在现实网络上的虚拟网络
  • 主要是为了解决服务器地理位置、服务器稳定性而诞生的
  • 依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能,使用户就近获取所需内容,降低网络拥塞,提高用户响应速度和命中率
  • 一般用在存储静态资源

    CDN 的缓存机制

  • 通过 CDN 的缓存机制,不同设备访问相同网站时,就可以直接通过 CDN 服务器的缓存拉取对应的网站文件

  • 不需要每个用户访问网站时,请求都打到源站,减少源站的压力

    CDN 和 DNS 的关系

  • 浏览器发送 DNS 查询请求到 DNS 服务器

  • DNS 服务器会返回 CDN 专用的处理 DNS 请求的 DNS 服务器的 IP 地址给到浏览器
  • 浏览器访问 CDN 专用的 DNS 服务器,DNS 服务器返回 CDN 负载均衡服务器的 IP 地址
  • 浏览器访问 CDN 负载均衡服务器,根据用户的网络状态,在 CDN网络中返回最适合的 CDN 服务器的 IP 地址

    CDN 访问数据的流程

  1. 浏览器拿到 CDN 服务器的 IP 地址之后,就会访问它
  2. 假设第一个 CDN 服务器没有需要的网站文件(缓存中没有),就会去 CDN 网络中的上层 CDN 服务器中拉取
  3. 如果上层 CDN 服务器没有还会继续往上层找
  4. 如果所有上层 CDN 服务器都没有找到,就会去源站中拉取
  5. 拉取成功之后,就会在刚刚经过的所有 CDN 服务器中缓存这些网站文件
  6. 最后第一个 CDN 服务器会将网络文件发送给浏览器