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

Http和https有关知识点

Response 组成
HTTP 响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

6.谈谈对 http 缓存的了解


依赖于请求和响应 header 里的参数类实现的,最终决定从缓存中取,还是从服务端重新拉取,HTTP 的缓存机制的流程如下所示:包括强制缓存和对比缓存。时间是强制缓存,标识符是对比缓存。

Http和https有关知识点

强制缓存使用的的两个标识
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。