HTTP知识总结

1. 基本概念

  • 超文本传输协议

    • 超文本:文字图像视频等的混合,通过浏览器展示给用户,通过超链接能跳转

    • 传输:两点之间、双向传输、允许接力

    • 协议:交流通信的规范,以及相关的各种控制和错误处理方式

  • 常见状态码:

    • 状态码分类状态码含义
      1XX   提示信息,协议处理的一种中间状态,实际应用较少
      2XX   服务器成功处理了客户端的请求
        200 OK 表示一切正常,非head请求服务器返回的响应头会有body数据
        204 No Content 响应头没有body数据
      3XX   表示客户端请求的资源发生了变动,需要客户端用新的URL重新发送请求获取资源,也就是重定向
        301 Moved Permanently 永久重定向,说明请求的资源已经不存在了,需要改用新的URL访问
        302 Found(Moved Temporarily) 临时重定向,说明请求的资源还在,但暂时需要用另一个URL访问
      4XX   表示客户端发送的报文有误,服务器无法处理,也即错误码
        403 Forbidden 服务器禁止访问资源,不是客户端请求出错
        404 Not Found 请求资源在服务器上不存在或未找到,所以无法提供给客户端
      5XX   服务器处理时内部发生错误
        502 Bad Gateway 服务器作为网关或者代理时返回的错误码,表示服务器自身正常,访问后端服务器发生了错误
        503 Service Unavailable 表示服务器当前很忙 ,暂时无法响应服务器,类似网络服务正忙,请稍后重试
  • HTTP常见字段

    • 字段含义
      Host 客户端发送请求时用来指定服务器域名
      Content-Length 服务器返回时,表示本次回应的数据长度
      Connection 客户端要求服务器使用TCP持久链接,以便其他请求复用,兼容老版本制定字段首部为Keep-Alive
      Content-Type 服务器回应时告诉客户端,本次数据是什么格式
      Accept 客户端表明自己可以接受的数据格式
      Encoding 数据使用什么压缩格式,有Accept-Encoding和Content-Encoding

2. GET和POST

  • GET和POST有哪些区别

    • GET 是请求从服务器获取资源,可以是静态的文本、页面、图片、视频等

    • POST 是向URI 指定的资源提交数据,数据就放在报文的body里

    • GET请求也可以带参数,带的参数数据量有限制且跟在 URL 后面;POST 请求带的参数没有限制且放在请求体里面。

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

    • 安全 是指请求方法不会破坏服务器上的资源

    • 幂等 是指执行多次相同的操作,结果都是相同的

    • GET肯定是安全且幂等,因为是请求读取操作

    • POST是增加或提交数据的操作,会修改服务器操作,所以不安全,多次提交数据会创建多个资源,所以不是幂等的

3. HTTP特性

  • 无状态

    • 优点:服务器不会去记忆HTTP状态,所以不需要额外的资源来记录状态信息,减轻服务器负担,可以把更多的CPU和内存用来对外提供服务

    • 缺点:没有记忆能力,完成有关联性的操作时会非常麻烦

    • Cookie技术

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

      • 和Session区别

        • Cookie在客户端,Session在服务器端

        • Cookie不是很安全,可能发生Cookie欺骗

        • Session占用服务器性能

        • 单个Cookie不能超过4k,浏览器限制一个站点最多20个Cookie

        • 重要的放Session,不太重要放Cookie

  • 明文传输

    • 优点:方便调试

    • 缺点:信息不安全

  • 不安全

    • 通信使用明文

    • 不验证通信方的身份

    • 无法证明报文的完整性

    • 可以用HTTPS方式解决——引入SSL/TLS层

4. HTTPS

  • 与HTTP区别

    • HTTPS解决HTTP不安全的缺陷,在TCP和HTTP中间加入了SSL/TLS安全协议,使得报文能够加密传输

    • HTTP连接简单,三次握手即可;HTTPS需要三次握手加SSL/TLS握手

    • HTTPS协议需要向CA申请数字证书,来保证服务器的身份是可信的

  • 解决了HTTP的哪些问题

    • 窃听风险:混合加密

      • 将对称加密和非对称加密进行结合

        • 在通信建立前使用非对称加密交换会话密钥

        • 通信过程使用对称加密的方式加密明文

      • 原因

        • 对称加密用一个密钥,运算快,密钥必须保密

        • 非对称加密使用两个密钥,公钥可以任意分发而私钥保密,解决了密钥交换问题

    • 篡改风险:摘要算法

      • 发送明文前会通过摘要算法算出摘要,把摘要+明文一同加密成密文再发送给服务器,服务器用相同的摘要算法算出发送过来的摘要并做比较

    • 冒充风险:将服务器公钥放入数字证书中

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

      • 为保证公钥不被篡改和可信,借助CA把服务器公钥放在数字证书中,只要证书可信,公钥就可信

  • HTTPS连接建立过程

    • 基本流程

      1. 客户端向服务器索要并验证服务器的公钥

      2. 双方协商生产会话密钥

      3. 双方采用会话密钥进行加密通信

    • 详细流程

      1. ClientHello:客户端向服务器发送加密通知请求,

        1. 内容有客户端支持的SSL/TLS协议版本如TLS1.2版本

        2. 客户端生产的随机数,后面用于生产会话密钥

        3. 客户端支持的密码套件列表如RSA加密算法

      2. ServerHello:服务端响应内容

        1. 确认SSL/TLS 版本,不支持则关闭加密通信

        2. 服务器生产随机数用于生产会话密钥

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

        4. 服务器的数字证书

      3. 客户端回应

        1. 客户端在收到回应之后就通过CA公钥确认服务器数字证书真实性;证书没问题则会取出服务器公钥,使用它加密报文,向服务器发送如下信息

        2. 一个随机数,用公钥加密

        3. 加密通信算法改变通知,表示随后的信息都将用会话密钥加密通信

        4. 客户端握手结束通知,表示客户端的握手阶段已经结束同时把全部数据做个摘要

      4. 此时生成了三个随机数,服务器和客户端用双方协商的加密算法,各自生成本次通信的会话密钥

      5. 服务器的最后回应

        1. 算出会话密钥,然后发送如下信息

        2. 加密通信算法改变通知表示随后的信息都将使用会话密钥加密通信

        3. 服务器握手结束通知,表示服务器的握手阶段已经结束;同时把之前所有内容做一个摘要供客户端校验

5. HTTP演变

  • HTTP/1.1变化

    • 长连接 :keep-alive

    • 管道传输:不必等到响应就能发下一个包

  • HTTP/2 变化

    • 头部压缩 :如果多个请求头是一样的或者相似的,会消除重复的部分

    • 二进制格式:头信息和数据体都是二进制,并且统称为帧:头数据帧和数据帧

    • 数据流 :数据包不按顺序发送,所以对数据包做标记指出属于哪个回应;每个请求或回应的所有数据包称为一个数据流

    • 多路复用:可以在一个连接中并发多个请求不用按照顺序一一对应——解决队头阻塞的问题

    • 服务器推送:在浏览器刚请求HTML的时候就提前吧可能会用得到的JS、CSS等静态资源主动发送给客户端,减少延时的等待,也就是服务器推送

  • HTTP/3变化

    • 引入UDP,基于UDP的QUIC协议

    • TLS升级为最新的1.3版本,头部压缩算法也升级成了 QPack

    • QUIC把TCP+TLS六次握手合并成了3次

整理自 wx公众号 小林coding 《图解网络》

posted on 2021-08-13 18:29  xyl322  阅读(46)  评论(0)    收藏  举报