http 与 https总结(面试重点知识)

90 阅读10分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

httphttps是计算机网络的基础知识点之一,本文对它们做一个介绍与对比,并把http几个版本区别做一下介绍,拓展下自己的知识积累。

HTTP与HTTPS简短介绍

HTTP超文本传输协议,它定义了客户端和服务器之间交换报文的格式和方式,默认使用 80 端口。它使用 TCP 作为传输层协议,保证了数据传输的可靠性。

HTTPS 指的是超文本传输安全协议,HTTPS 是基于 HTTP 协议的,不过它会使用 TLS/SSL 来对数据加密,默认的端口号是 443。第三方没有办法窃听。并且它提供了一种校验机制,信息一旦被篡改,通信的双方会立刻发现。它还配备了身份证书,防止身份被冒充的情况出现。

HTTP

  1. HTTP 有两种连接模式,一种是持续连接,一种非持续连接。非持续连接指的是服务器必须为每一个请求的对象建立和维护一个全新的连接。持续连接下,TCP 连接默认不关闭,可以被多个请求复用。

    采用持续连接的好处是可以避免每次建立 TCP连接三次握手时所花费的时间。 HTTP1.0 使用的非持续的连接,但是可以在请求时,加上 Connection: keep-alive 来要求服务器不要关闭 TCP 连接。HTTP1.1 以后默认采用的是持续的连接。目前对于同一个域,大多数浏览器支持同时建立 6 个持久连接;

  2. HTTP无连接的特性,指的是每次连接只能处理一个请求,收到响应后立即断开连接。但在现在网站动则几十条HTTP请求的情况下,很容易达到浏览器请求上限,并且每次请求都建立新的tcp连接(每次都有三次握手四次挥别)极大的增加了通信开销。为解决这个问题,有人提出了持久连接(也叫长连接、长轮询)。一定时间内,同一域名下的HTTP请求,只要两端都没有提出断开连接,则持久保持TCP连接状态,连接通道可以被多个请求复用;

  3. 管道化:管道化可以不用等待响应返回就可以发送下个请求并按顺序返回响应,这样就能做到请求和响应不再是依次交替的了。可以支持一次性发送多个请求,并一次性接收多个响应。(初次创建连接时不应该启动管线机制,因为服务器不一定支持该协议);

  4. HTTP 是一个无状态的协议,即不会保存关于客户的任何信息。无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息HTTP是做不到的,客户端和服务端是两种身份,客户端请求资源,http帮你建立连接帮你终结传输,下次客户端再来服务端无法区分你的身份是不是和上次是一个身份,也就是说单从http协议上是不能区分两次连接者的身份状态的。解决办法:1 、通过Cookie; 2、通过Session会话保存

  5. cookies机制和session机制的区别:(1)、cookies数据保存在客户端。session数据保存在服务端; (2)、cookies可以减轻服务器压力,但是不安全,容易进行cookies欺骗; (3)、session安全一点,但是占用服务器资源。

  6. Http协议由什么组成(HTTP请求报文与响应报文格式):
    请求报文包括三部分:(1)请求行:包含请求方法,URL,HTTP 版本字段;(2)请求首部字段;(3.请求内容实体。

    响应报文包含三部分:(1)状态行:包含HTTP版本,状态码,相应的状态信息;(2)响应首部字段(3)响应内容实体。

  7. 常见的HTTP相应状态码

    一般 1XX 代表服务器接收到请求、2XX 代表成功、3XX 代表重定向、4XX 代表客户端错误、5XX 代表服务器端错误。

        200-服务器已成功处理了请求并提供了请求的网页;
        202-服务器端已经收到请求消息,但是尚未进行处理;
        204-服务器成功处理了请求,但没有返回任何内容;
        301-永久移动(重定向);
        302-临时移动;
        304-所请求的资源未修改;
        400-客户端请求的语法错误;
        404-请求的资源不存在;
        500-服务器内部错误;
        503-服务器目前无法使用(由于超载或停机维护)通常,这只是暂时状态。
    

    301和302的区别:301永久移动。请求的资源已被永久的移动到新URL,返回信息会包括新的URI,浏览器会自动定向到新URL。今后任何新的请求都应使用新的URL代替。比较常用的场景是使用域名跳转,301请求可以缓存。302用来做临时跳转,资源只是临时被移动。客户端应继续使用原有URL,比如未登陆的用户访问用户中心重定向到登录页面。

  8. HTTP中有哪些请求方式

        GET:一般只被用于向服务器获取数据
        POST:用于传输资源,通常会造成服务器资源的修改
        HEAD:获得报文首部,与GET方法类似,只不过不返回报文主体,一般用于验证URL是否有效
        PUT :用于上传文件到服务器
        DELETE:用于删除服务器上的资源
        OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,允许客户端查看、测试服务器性能
        TRACE:回显服务器收到的请求,主要用于测试或诊断
    

    Post 和 Get 的区别?

    1)从应用场景上来说,一般 Get 请求用于对服务器资源不会产生影响的场景,比如说请求一个网页。
    而 Post 一般用于对服务器资源会产生影响的情景。比如注册用户这一类的操作。
    (2)因为不同的应用场景,所以浏览器一般会对 Get 请求缓存,但很少对 Post 请求缓存。
    (3)从发送的报文格式来说,Get 请求的报文中实体部分为空,Post 请求的报文中实体部分一般为向服
    务器发送的数据。
    (4)Post 相对 Get 安全一点,因为Get 请求都包含在 URL 里且会被浏览器保存历史纪录。Post 不
    会,但是在抓包的情况下都是一样的。
    (5)URL有长度限制,会影响 Get 请求。
    

HTTPS(主要从与HTTP对比来介绍)

  1. HTTP 与 HTTPS 有哪些区别

    1HTTP 是超文本传输协议,采用明文传输数据,存在安全风险的问题HTTPS 则解决 HTTP 不安全的缺
    陷,在 TCPHTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输
    2HTTP 连接建立相对简单, TCP 三次握手之后就可以报文传输HTTPSTCP 三次握手之后,还
    需进行 SSL/TLS 的握手过程,才可进入加密报文传输
    3HTTP 的端口号是 80HTTPS 的端口号是 443
    4HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的
    
    
  2. HTTPS 解决了 HTTP 的哪些问题

    HTTP 由于是明文传输,所以安全上存在以下三个风险:
    1、窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
    2、篡改风险,比如强制入垃圾广告,视觉污染,用户眼容易瞎。
    3、冒充风险,比如冒充淘宝网站,用户钱容易没。
    HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,可以很好的解决了上述的风险:
    1、信息加密:交互信息无法被窃取
    2、校验机制:无法篡改通信内容,篡改了就不能正常显示
    3、身份证书:举个例子,证明京东是真的京东网
    
  3. TLS两种加密方式
    对称加密: 这种加密方式就是加密解密使用相同的密钥,两边都知道如何加密解密。(特点:加密解密同用一个密钥)。但是存在一个问题就是只要拿到密钥任何人都能破解密码。因为传输数据都是走的网络,如果将秘钥通过网络的方式传递的话,一旦秘钥被截获就没有加密的意义了。
    非对称加密:有公钥私钥之分,公钥所有人都可以知道,可以将数据用公钥加密,对方收到被加密的信息后,再使用自己的私钥进行解密。(特点:使用两把密钥)

  4. HTTPS采用混合加密机制(重要)
    非对称加密安全但是慢,HTTPS为了兼顾安全与效率,同时使用了对称加密和非对称加密。数据是被对称加密传输的,对称加密过程需要客户端的一个密钥,为了确保能把该密钥安全传输到服务器端,采用非对称加密对该密钥进行加密传输,总的来说,对数据进行对称加密,对称加密所要使用的密钥通过非对称加密传输

  5. TLS握手过程

    1. 第一步,客户端向服务器发起请求,请求中包含使用的协议版本号、生成的一个随机数、以及客户端支持的
    加密方法。
    2. 第二步,服务器端接收到请求后,确认双方使用的加密方法、并给出服务器的数字证书、以及一个服务器生
    成的随机数。
    3. 第三步,客户端确认服务器证书有效后,生成一个新的随机数,并使用数字证书中的公钥,加密这个随机
    数,然后发给服务器。
    4. 第四步,服务器使用自己的私钥,来解密客户端发送过来的随机数。
    5. 第五步,客户端和服务器端根据约定的加密方法使用前面的三个随机数,生成对话秘钥,以后的对话过程都
    使用这个秘钥 来加密信息。
    

    握手阶段有三点需要注意

    1)生成对话密钥一共需要三个随机数。
    (2)握手之后的对话使用"对话密钥"加密(对称加密),服务器的公钥和私钥只用于加密和解密"对话密
    钥"(非对称加密),无其他作用。
    (3)服务器公钥放在服务器的数字证书之中。
    

HTTP有哪些优点

HTTPS突出一个安全的特性,那http本身又有哪些独特的优点呢?

  1. 简单:HTTP 基本的报文格式就是 header + body。
  2. 灵活:通过一个HTTP协议可以完成不同类型的数据传输所以比较灵活
  3. 可靠:因为http是基于tcp/ip传输的,所以相对可靠
  4. 无状态:无状态的好处,因为服务器不会去记忆 HTTP 的状态,所以不需要额外的资源来记录状态信息,这能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务。但是它也有缺点:无状态的坏处,既然服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦。例如登录->添加购物车->下单->结算->支付,这系列操作都要知道用户的身份才行。但服务器不知道这些请求是有关联的,每次都要问一遍身份信息。