Http和https有关知识点
1.htpp和https区别?
http 是超文本传输协议,信息是明文传输。http 的连接很简单,是无状态的
HTTPS 协议是由 HTTP+ SSL 构建的可进行加密传输、身份认证的网络协议。https 需要到 ca 申请证书,一般证书都是收费的。 SSL/TSL 的常见开源实现是 OpenSSL
http 和 https 使用的是不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
2. http1.0和http1.1区别
HTTP1.1 也是当前使用最为广泛的 HTTP 协议。
1、缓存处理,在 HTTP1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP1.1 则引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略。
2、带宽优化及网络连接的使用,HTTP1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1 则在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
3、错误通知的管理,在 HTTP1.1 中新增了 24 个错误状态响应码,如 409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
4、Host 头处理,在 HTTP1.0 中认为每台服务器都绑定一个唯一的 IP 地址,因此,请求消息中的 URL 并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个 IP 地址。HTTP1.1 的请求消息和响应消息都应支持 Host 头域,且请求消息中如果没有 Host 头域会报告一个错误(400 Bad Request)。
5、长连接,HTTP 1.1 支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个 TCP 连接上可以传送多个 HTTP 请求和响应,减少了建立和关闭连接的消耗和延迟,在 HTTP1.1 中默认开启 Connection: keep-alive,一定程度上弥补了 HTTP1.0 每次请求都要创建连接的缺点。
3.SPDY
HTTP1.x 的优化方案,SPDY 位于 HTTP 之下,TCP 和 SSL 之上
1、降低延迟,针对HTTP高延迟的问题,SPDY优雅的采取了多路复用(multiplexing)。多路复用通过多个请求 stream 共享一个 tcp 连接的方式,
2、请求优先级(request prioritization)。多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY 允许给每个 request 设置优先级.
3、header 压缩。前面提到 HTTP1.x 的 header 很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量。
4、基于 HTTPS 的加密协议传输,大大提高了传输数据的可靠性。
5、服务端推送(server push),采用了 SPDY 的网页,例如我的网页有一个 sytle.css的请求,在客户端收到 sytle.css 数据的同时,服务端会将 sytle.js 的文件推送给客户端,当客户端再次尝试获取 sytle.js 时就可以直接从缓存中获取到,不用再发请求了。
4.HTTP2.0 和 HTTP1.X 相比的新特性
1.新的二进制格式(Binary Format),而HTTP1.x 的解析是基于文本。
2.多路复用(MultiPlexing),一个 request 对应一个 id,这样一个连接上可以有多个 request
3.header 压缩 . HTTP2.0 使用 encoder 来减少需要传输的 header 大小,通讯双方各自 cache 一份 header fields 表,既避免了重复 header 的传输,又减小了需要传输的大小。
4.服务端推送
5. request

Response 组成
HTTP 响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
6.谈谈对 http 缓存的了解
。
依赖于请求和响应 header 里的参数类实现的,最终决定从缓存中取,还是从服务端重新拉取,HTTP 的缓存机制的流程如下所示:包括强制缓存和对比缓存。时间是强制缓存,标识符是对比缓存。

强制缓存使用的的两个标识
Expires:Expires 的值为服务端返回的到期时间,即下一次请求时,请求时间小于服务端返回的到期时间,直接使用缓存数据。到期时间是服务端生成的,客户端和服务端的时间可能有误差。
Cache-Control:Expires 有个时间校验的问题,所有 HTTP1.1 采用 Cache-Control替代 Expires。 Cache-Control 的取值有以下几种:private: 客户端可以缓存。 public: 客户端和代理服务器都可缓存。 max-age=xxx: 缓存的内容将在 xxx 秒后失效 。no-cache: 需要使用对比缓存来验证缓存数据。 no-store: 所有内容都不会缓存,强制缓存,对比缓存都不会触发。
对比缓存的两个标识 :Last-Modified/If-Modified-Since Etag/If-None-Match
一种时间戳标记资源是否修改的方法,还有一种资源标识码 ETag 的方式来标记是否修改
Last-Modified 表示资源上次修改的时间。当客户端发送第一次请求时,服务端返回资源上次修改的时间:
Last-Modified: Tue, 12 Jan 2016 09:31:27 GMT
客户端再次发送,会在 header 里携带 If-Modified-Since。将上次服务端返回的资源时间上传给服务端。
If-Modified-Since: Tue, 12 Jan 2016 09:31:27 GMT
服务端接收到客户端发来的资源修改时间,与自己当前的资源修改时间进行对比,如果自己的资源修改时间大于客户端发来的资源修改时间,则说明资源做过修改, 则返回 200 表示需要重新请求资源,否则返回 304 表示资源没有被修改,可以继续使用缓存。
Etag/If-None-Match
资源标识码 ETag 的方式来标记是否修改,如果标识码发生改变,则说明资源已经被修改,ETag 优先级高于 Last-Modified。
ETag 是资源文件的一种标识码,当客户端发送第一次请求时,服务端会返回当前资源的标识码:ETag: "5694c7ef-24dc"客户端再次发送,会在 header 里携带上次服务端返回的资源标识码:If-None-Match:“5694c7ef-24dc” 服务端接收到客户端发来的资源标识码,则会与自己当前的资源吗进行比较,如果不同,则说明资源已经被修改,则返回 200,如果相同则说明资源没有被修改,返回 304,客户端可以继续使用缓存。
6、Http 长连接。
Http1.0 是短连接,HTTP1.1 默认是长连接,也就是默认 Connection 的值就是 keep-alive。但是长连接实质是指的 TCP 连接,而不是 HTTP 连接。TCP 连接是一个双向的通道,它是可以保持一段时间不关闭的,因此 TCP 连接才有真正的长连接和短连接这一说。
Http1.1 为什么要用使用 tcp 长连接?
长连接是指的 TCP 连接,也就是说复用的是 TCP 连接。即长连接情况下,多个 HTTP 请求可以复用同一个 TCP 连接,这就节省了很多 TCP 连接建立和断开的消耗。此外,长连接并不是永久连接的。如果一段时间内(具体的时间长短,是可以在 header 当中进行设置的,也就是所谓的超时时间),这个连接没有 HTTP 请求发出的话,那么这个长连接就会被断掉。
7.加密算法
对称加密,加密用的密钥和解密用的密钥是同一个,比较有代表性的就是 AES 加密算法;
非对称加密,加密用的密钥称为公钥,解密用的密钥称为私钥,经常使用到的 RSA加密算法就是非对称加密的;
HASH 算法:MD5, SHA1, SHA256
CA证书组成:
证书的颁发机构、版本 证书的使用者 证书的公钥 证书的有效时间 证书的数字签名 Hash 值和签名 Hash 算法
8.客户端如何校验 CA 证书
CA 证书中的 Hash 值,其实是用证书的私钥进行加密后的值(证书的私钥不在 CA 证书中)。然后客户端得到证书后,利用证书中的公钥去解密该 Hash 值,得到 Hash-a ;然后再利用证书内的签名 Hash 算法去生成一个 Hash-b 。最后比较 Hash-a 和 Hash-b 这两个的值。如果相等,那么证明了该证书是对的,服务端是可以被信任的;如果不相等,那么就说明该证书是错误的,可能被篡改了,浏览器会给出相关提示,无法建立起 HTTPS 连接。除此之外,还会校验 CA 证书的有效时间和域名匹配等。
9.HTTPS 中的 SSL 握手建立过程
HTTPS 加密原理的过程中把对称加密和非对称加密都利用了起来。即利用了非对称加密安全性高的特点,又利用了对称加密速度快,效率高的好处
假设现在有客户端 A 和服务器 B :
1 、 首 先 , 客 户 端 A 访 问 服 务 器 B , 比 如 我 们 用 浏 览 器 打 开 一 个 网页 www.baidu.com ,这时,浏览器就是客户端 A ,百度的服务器就是服务器 B 了。这时候客户端 A 会生成一个随机数 1,把随机数 1 、自己支持的 SSL 版本号以及加密算法等这些信息告诉服务器 B 。
2、服务器 B 知道这些信息后,然后确认一下双方的加密算法,然后服务端也生成一个随机数 B ,并将随机数 B 和 CA 颁发给自己的证书一同返回给客户端 A 。
3、客户端 A 得到 CA 证书后,会去校验该 CA 证书的有效性,校验方法在上面已经说过了。校验通过后,客户端生成一个随机数 3 ,然后用证书中的公钥加密随机数 3 并传输给服务端 B
4、服务端 B 得到加密后的随机数 3,然后利用私钥进行解密,得到真正的随机数3。
5、最后,客户端 A 和服务端 B 都有随机数 1、随机数 2、随机数 3,然后双方利用这三个随机数生成一个对话密钥。之后传输内容就是利用对话密钥来进行加解密了。这时就是利用了对称加密,一般用的都是 AES 算法。
6、客户端 A 通知服务端 B ,指明后面的通讯用对称密钥来完成,同时通知服务器 B 客户端 A 的握手过程结束。
7、服务端 B 通知客户端 A,指明后面的通讯用对称密钥来完成,同时通知客户端A 服务器 B 的握手过程结束。
8、SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户端 A 和服务器 B 开始使用相同的对话密钥进行数据通讯。
10.HTTPS 如何防范中间人攻击
什么是中间人攻击?
当c/s通信时,攻击者利用工具或技术将自己置于C/s两端的中间并截获数据,致使c/s认为自己在和对方通信。
有几种攻击方式?
1、嗅探:用于捕获流进和流出系统的数据包的技术。
2、数据包注入: 攻击者会将恶意数据包注入常规数据中。
3、会话劫持 黑客会潜伏在会话中,并最终控制它。
4、SSL 剥离: 攻击者使 SSL/TLS 连接剥落,协议便从安全的 HTTPS 变成了不安全的 HTTP。
