一梦七年。
一派青春撞了南墙,一生热爱回头太难。
文章 20
标签 29
分类 11
HTTP和HTTPS协议相关

HTTP和HTTPS协议相关

最近打算换工作了,在复习准备面试,就把复习过程中做的笔记放上来了,需要简单了解下 HTTP 和 HTTPS 的时候可以看看。

一、HTTP 协议

  • 基本概念:
    HTTP(超文本传输协议)是基于传输层 TCP/IP 协议的应用层协议。HTTP 是一种能够获取如 HTML 这样的网络资源的通讯协议,它是在 Web 上进行数据交换的基础,是一种 CS(client-server)协议,也就是说,请求通常是由像浏览器这样的接受方发起的。一个完整的 Web 文档通常是由不同的子文档拼接而成的,像是文本、布局描述、图片、视频、脚本等等。

  • HTTP 版本:
    HTTP 协议诞生至今(2020 年)经历了 0.9、1.0、1.1、2.0 等多个版本,最初的 0.9 版本被称为单行协议,请求由单行指令构成,以唯一可用方法 GET 开头,其后跟目标资源的路径,且只能传输 HTML 文件。随着互联网的发展,单一的文件传输类型和请求方法已经无法满足需求了,因此紧接着又诞生了 HTTP1.0 版本,引入了 HTTP 头的概念,使得 HTTP 协议更具灵活性和可扩展性,并且支持了更多请求方法,如:POST、PUT、DELETE 等,以及更多的文件类型。由于 1.0 版本多种不同的实现方式在实际运用中显得有些混乱,1997 年修订并发布了 HTTP1.1 协议标准,消除了大量歧义内容并引入了多项改进,如:连接可以复用、额外的缓存控制机制、内容协商机制、增加管线化技术等。到如今(2020 年),网页越来越复杂,更多的数据需要通过 HTTP 请求,HTTP1.1 对并行请求的处理越发捉襟见肘,因此又催生了 HTTP2.0 协议,并于 2015 年正式标准化,HTTP2.0 不同于以往,它是二进制协议而不是文本协议,可以复用,能在同一个连接中处理并行请求,摒弃了 1.1 版本中请求顺序和阻塞的约束,压缩了 headers,去除了重复和传输重复数据的成本。了解更多

  • HTTP 报文及结构:(HTTP 协议的请求报文和响应报文的结构基本相同,由三大部分组成)

    1. 请求行:描述请求或响应的基本信息;如:GET / HTTP/1.1

    2. 请求头部集:以键值对的形式展示的关于请求的详细信息,如:Host: 127.0.0.1

    3. 消息正文:实际传输的数据,可以纯文本、图片、视频等。

    4. 报文示例:

      HTTP/1.1 200 OK
      Date: Sat, 26 Dec 2020 12:08:24 GMT
      Content-Type: application/javascript
      Content-Length: 71
      Connection: keep-alive
      x-powered-by: Egg
      x-server-id: lego011175107102.center.na62
      X-Content-Type-Options: nosniff
      x-readtime: 31
      Server: Tengine/Aserver
      EagleEye-TraceId: 210595de16089845042084584ee542
      Strict-Transport-Security: max-age=31536000
      Timing-Allow-Origin: \*
      
      /\*\*/ typeof fn_ar61fXfu === 'function' && fn_ar61fXfu({"result":true});

1、HTTP 为什么是无状态协议,如何解决无状态带来的问题?

  • 无状态协议:
    HTTP 之所以会被认为是无状态协议,是因为每一次 HTTP 请求之间几乎是毫无关联,即使同一个连接能发起多个 HTTP 请求,但每个 HTTP 请求都是独立的,必须包含该请求所需要的所有信息数据,就像是你去银行取钱,业务员不会因为你昨天来取过钱就不要求你出示身份证或密码,你每一次取钱都必须使用你的密码。
  • 无状态带来的问题:
    最初 HTTP 只是用来请求简单的 HTML 文件,基本上也都是用于展示的一些静态内容。但是随着互联网的发展,web 中出现了越来越多的表单、按钮等交互元素,网页的动态内容越来越多,有的网页甚至要登录之后才能使用,而且某些操作会对当前账号产生影响,如购物车添加减少商品等,这些需求使得 HTTP 迫切需要支持有状态。
  • 如何解决无状态问题:
    随后便推出了 Cookie、Session 等解决方案,以此来弥补无状态带来的状态保持问题。当浏览器请求成功后,服务器将信息存到 Cookie 中返回给浏览器,下一次发起请求的时候浏览器就会自动带上 Cookie,通过这种方式来解决无状态的问题。Session 的方式与 Cookie 类似,不过 Session 是保存在服务端的,当服务器接收到一个请求,首先会检查这个请求是否包含 sessionId,如果包含则说明此前已经给该客户端建立过 Session,直接通过 sessionId 检索出对应的 session 来使用即可,否则根据情况来选择是否给该浏览器创建 Session。一般 sessionId 会通过 Cookie 返回给浏览器。

2、什么是 HTTPS 协议,HTTP 协议与 HTTPS 协议的区别?

  • HTTP 的安全风险:
    在说明什么是 HTTPS 之前,先讲讲 HTTP 的安全性问题。由于 HTTP 的请求信息都是明文传输,且不会对数据进行验证,这使得我们的数据很容易被窃取、篡改,甚至自己的身份被别人冒充使用等。
  • 什么是 HTTPS:
    由于 HTTP 存在上述安全问题,导致实际应用中很容易受到攻击,HTTPS 应运而生。HTTPS(超文本安全传输协议),即 HTTP+SSL/TLS,通过 SSL 证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。简单的理解为带有加密功能的 HTTP 协议。
  • SSL/TSL:
    SSL(安全套接字协议)与 TLS(传输层安全协议)是专为数据通讯提供安全支持的协议,通过对 HTTP 进行加密和解密,保障数据的安全可靠。SSL/TLS 协议运行机制的概述
  • HTTPS 的缺点:
    1. HTTPS 协议需多次握手,这会导致页面加载时间延长。
    2. HTTPS 连接的缓存不如 HTTP 高效,这会增加数据开销和功耗。
    3. 申请 SSL 证书需要钱,功能越强大的证书越贵。
    4. SSL 涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。
  • HTTP 与 HTTPS 的区别:
    1. HTTPS 是 HTTP 协议的安全版本,HTTP 协议的数据传输是明文的,是不安全的,HTTPS 使用了 SSL/TLS 协议进行了加密处理,安全性高于 HTTP 协议。
    2. HTTP 和 HTTPS 使用连接方式不同,默认端口也不一样,HTTP 是 80,HTTPS 是 443。

3、URI、URL、URN 是什么?

  1. URI:

    • 统一资源标识符,用来唯一标识一个资源。
    • URL、URN 是 URI 的子集。
  2. URL:

    • 统一资源定位符,用来标识一个资源的位置。
    • 每个 URL 都是 URI,但是 URI 不一定都是 URL。
  3. URN:

    • 统一资源名称。
    • 每个 URN 都是 URI,但是 URI 不一定都是 URN。
  4. 图示:(图片来源于网络)

    uri、url、urn

4、HTTP 有哪些 Method,及各自的特点是什么?

  • GET:获取资源,可以理解为读取或者下载数据,参数通过 URL 传递,对 URL 大小有限制;
  • HEAD:获取资源的元信息,即报文首部;
  • POST:向资源提交数据,相当于写入或上传数据,参数通过 URL 或 body 传递,body 参数大小无限制;
  • PUT:用于更新某个已存在的资源,传参类似 POST;
  • DELETE:删除某个资源;
  • OPTIONS:列出可对资源实行的方法;
  • CONNECT:建立特殊的连接隧道;
  • TRACE:追踪请求 - 响应的传输路径

5、HTTP 常用的头部字段及其作用?

  1. 通用头部字段
    • Cache-Control: 缓存控制字段,设置资源的有效期。
    • Connection: 管理网络连接,决定请求完成后是否关闭 TCP 连接,HTTP/1.1 默认使用持久连接。
    • Date: 报文创建的详细日期。
    • Transfer-Encoding: 传输编码,主要用于为报文主体进行编码,以便能确定传输何时完成查看详情
    • Upgrade: 升级协议,将请求升级为其他协议如 websocket。
  2. 请求头部字段
    • Accept: 通知服务器,浏览器可以处理的数据类型。
    • Accept-Charset: 通知服务器,浏览器可以处理的字符集类型。
    • Accept-Encoding: 通知服务器,浏览器可以理解的编码方式。
    • Authorization: 浏览器发起请求时携带的用于验证用户身份的凭证。
    • Host: 请求的服务器主机名和端口号。
    • if-Match: 表示本次请求是一个条件请求,只有满足指定条件才能进行操作。
    • if-Modified-Since: 条件请求,表示请求资源在指定时间点之后是否有更改过,有则返回该资源,否则返回 304 响应。只可用于 GET 或 HEAD
    • User-Agent: 客户端相关信息字段,包含客户端应用类型、操作系统、版本等信息。
  3. 响应头部字段
    • Accept-Ranges: 是否支持范围请求。
    • ETag: 资源的特定版本的标识符。
    • Location: 使客户端重定向到指定 URL,一般用于 3xx 状态码的响应中。
    • Proxy-Authenticate: 代理服务器用于身份验证的凭证。
    • WWW-Authenticate: 使用何种验证方式去获取对资源的连接。
    • Server: 包含了处理请求的源头服务器所用到的软件相关信息。
    • Vary: 决定了对于未来的一个请求头,应该用一个缓存的回复(response)还是向源服务器请求一个新的回复。
    • Allow: 用于枚举资源所支持的 HTTP 方法的集合,一般在 405 状态码的响应中返回。
    • Content-Encoding: 对特定媒体类型的数据进行压缩时使用,表示消息主体进行了何种方式的内容编码转换,客户端应该怎样解码才能获取在 Content-Type 中标示的媒体类型内容。
    • Content-Language: 消息实体内容的自然语言。
    • Content-Length: 消息实体的大小。
    • Content-Location: 要返回的数据的地址选项,主要的用途是用来指定要访问的资源经过内容协商后的结果的 URL。
    • Content-Type: 告诉客户端实际返回的内容的内容类型。浏览器会在某些情况下进行 MIME 查找,并不一定遵循此标题的值; 为了防止这种行为,可以将标题 X-Content-Type-Options 设置为 nosniff。
    • X-Content-Type-Options: 用来提示客户端一定要遵循在 Content-Type 首部中对 MIME 类型 的设定,而不能对其进行修改。
    • EXpires: 消息实体的过期时间。
    • Last-Modified: 资源最后修改日期

二、HTTPS 协议

  • 基本概念:
    HTTPS(超文本安全传输协议)是 HTTP 协议的安全版本,在 HTTP 协议的基础上通过利用 SSL/TLS 对数据进行加密来保障连接的正确性以及数据的安全性。
  • HTTPS 版本(SSL/TLS 版本):
    SSL1.0、SSL2.0、SSL3.0 以及 TLS1.0、TLS1.1、TLS1.2,而 TLS 是 SSL 的升级版。目前主流浏览器都已实现 TLS1.2 的支持。SSL/TLS 是介于 HTTP 和 TCP 之间的一个安全协议。

1、HTTPS 原理

  • 对称加密:
    加密和解密使用同一个秘钥。优点:加密速度快。缺点:需要传输秘钥,并不能保障安全,秘钥管理困难。

  • 非对称加密:
    加密和解密使用不同的秘钥:公钥、私钥。公钥和私钥是一对,即一个公钥对应一个私钥,只有对应的私钥才能解密用公钥加密的数据。优点:安全性较高。缺点:加密速度慢。

  • HTTPS 的加密策略:
    HTTPS 主要是在 HTTP 协议和 TCP 协议之间使用 SSL/TLS 协议对数据进行加密处理,而 SSL/TLS 协议则是采用了非对称加密和对称加密对数据进行了加密处理。SSL/TLS 协议通过 4 次握手与服务端进证书验证和秘钥传输,之后进行 TCP 连接的 3 次握手,最后通过秘钥进行加密数据的传输。(图片来源于网络)

    uri、url、urn

    点击了解更多