• HTTP/HTTPS详解


    1. HTTP

    1.1 HTTP基础知识

    HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用
    于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
    HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。

    HTTP/0.9作用是传输传输超文本内容 HTML。
    协议定义了客户端发起请求、服务端响应请求的通信模式。

    HTTP1.1和HTTP1.0的区别

    1. 连接
      • HTTP1.1 持长连接,每个TCP连接上可以传送多个HTTP请求和响应,默认开启Connection:Keep-Alive
      • HTTP1.0默认为短连接,每次请求都需要建一个TCP连接。
    2. 缓存
      • HTTP1.0主要使 If-Modified-Since/Expires来做为缓存判断的标准
      • HTTP1.1则引入了更多的缓存控制策略例如Entity tag / If-None-Match等更多可供选择的缓存头来控制缓存策略。
    3. 管道化
      • 基于HTTP1.1的连接,使得请求管线化成为可能。管线化使得请求能够“并行”传输,但是响应必须按照请求发出的顺序依次返回,性能在一定程度上得到了改善。
    4. 增加Host字段
      • 使得一个服务器能够来创建多个 Web站点。
    5. 状态码
      • 新增了24个错误状态响应码
    6. 带宽优化
      • HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分, 服务器却将整个对象送过来了,并且不 持断点续传功能
      • HTTP1.1则在请求头引 了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content)

    HTTP2.0与HTTP1.1的区别

    1. 二进制分帧
      在应用层(HTTP/2.0)和传输层(TCP or UDP)之间增加一个二进制分帧层,从而突破HTTP1.1的性能限制,改进传输性能,实现低延迟和高吞吐量。
    2. 多路复用(MultiPlexing)
      允许同时通过单一的HTTP/2连接发起多重的请求-响应消息,这个强大的功能则是基于“二进制分帧”的特性。
    3. 首部压缩
      HTTP1.1不支持header数据的压缩,HTTP/2.0使 HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。高效的压缩算法可以很大的压缩header,减少发送包的数量从而降低延迟。
    4. 服务端推送(server push)
      HTTP/2中,服务器可以对客户端的一个请求发送多个响应,即服务器可以额外的向客户端推送资源,而无需客户端明确的请求。

    1.2 HTTP建立和断开连接

    建立连接:

    1. 先通过域名系统(Domain Name System,DNS)查询将域名转换为 IP 地址。即将 xxx.com 转换为 xxx.xxx.xxx.xx这一过程。
    2. 通过三次握手建立 TCP 连接。
    3. 发起 HTTP 请求。
    4. 目标服务器接收到 HTTP 请求并处理。
    5. 目标服务器往浏览器发回 HTTP 响应。
    6. 浏览器解析并渲染页面。

    断开连接:
    所有 HTTP 客户端(浏览器)、服务器都可在任意时刻关闭 TCP 连接。通常会在一条报文结束时关闭连接,但出错的时候,也可能在首部行的中间或其他任意位置关闭连接。

    HTTP的常见请求方式

    1. get:向服务端获取资源,所以查询操作一般用get。
    2. post:向服务端提交请求字段,创建操作使用 post,该操作不是幂等的,多次执行会导致多条数据被创建。
    3. put:修改指定URL的资源,如果资源不存在,则进行创建,修改操作一般使用 put,在http中,
      put 被定义成幂等的,多次操作会导致前面的数据被覆盖。
    4. patch:局部修改URL所在资源的数据,是对put的补充。
    5. delete:删除指定URL的资源。
    6. head:获取响应报文的首部,即获得URL资源的头部。
    7. options:询问服务器支持哪些方法,响应头中返回 Allow: GET、POST、HEAD。
    8. trace:追踪路径,主要用于测试或诊断;在请求头中在Max-Forwards字段设置数字,每经过一个
      服务器该数字就减一,当到0的时候就直接返回,一般通过该方法检查请求发送出去是否被篡改。

    2. HTTPS

    HTTPS工作原理(怎么建立连接):

    1. 首先,客户端向服务器端发送请求报文,请求与服务端建立连接。
    2. 服务端产生一对公私钥,然后将自己的公钥发送给CA机构,CA机构也有一对公私钥,然后CA机构使用自己的私钥将服务端发送过来的公钥进行加密,产生CA数字证书。
    3. 服务端响应客户端的请求,将CA机构生成的数字证书发送给客户端。
    4. 客户端将服务端发送过来的数字证书进行解析,验证这个数字证书是否合法,如果不合法,会发送警告。如果合法,取出服务端生成的公钥。
    5. 客户端取出公钥并生成一个随机码key(其实就是对称加密中的密钥)
    6. 客户端将加密后的随机码key发送给服务端,作为接下来的对称加密的密钥
    7. 服务端接收到随机码key后,使用自己的私钥对它进行解密,然后获得到随机码key。
    8. 服务端使用随机码key对传输的数据进行加密,在传输加密后的内容给客户端
    9. 客户端使用自己生成的随机码key解密服务端发送过来的数据,之后,客户端和服务端通过对称加密传输数据,将随机码Key作为传输的密钥。

    HTTP 常见的状态码有哪些?
    在这里插入图片描述

    HTTPS与HTTP的区别:
    HTTP 是明文传输,HTTPS通过SSL\TLS进行了加密
    HTTP 的端号是80,HTTPS 是 443
    HTTPS 需要到CA申请证书
    HTTP 的连接简单,是无状态的;HTTPS协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比HTTP 协议安全。

    SSL与TLS

    1. SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
    2. TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。TLS是HTTP与TCP协议之间的一层,通常TLS发生在TCP三次握手之后,此时进行TLS四次握手,然后再进行HTTP通信。

    HTTPS 解决了 HTTP 的哪些问题?
    HTTP 由于是明文传输,存在以下三个风险:

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

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

  • 相关阅读:
    Django连接MySQL数据库
    JAVA:如何优雅地书写if-else(策略模式、函数式接口、卫语句)
    神经网络如何提高准确率,神经网络的求解方式
    Transformers实战——多项选择
    Unity 场景烘培 ——unity灯光和设置天空盒(二)
    文心一言:中文生成式对话产品
    AWS认证SAA-C03每日一题
    基于Java+Swing实现《扫雷》游戏
    JavaScript重点知识总结一
    MATLAB循环结构之while语句
  • 原文地址:https://blog.csdn.net/qq_45087381/article/details/136917971