1.概念
HTTP:
超文本传输协议,属于应用层面向对象的协议。
HTTP 0.9:1991年发布的第一个版本,只有一个GET命令,服务器只能回应HTML格式的字符串。
HTTP 1.0:1996年发布,内容大大增加。除了GET之后还引入了POST命令和HEAD命令。HTTP请求和回应的格式除了数据部分,每次通信都必须包括头信息用来描述一些元数据。主要就是一次只能处理一个请求,不能同时收发数据。
HTTP 1.1:1997年发布,进一步完善了HTTP协议,直到现在也是比较流行的版本。可以处理多个请求,同时能够收发数据,同时也增加了更多的字段。
SPDY协议:2009年谷歌为了解决HTTP1.1效率不高的问题而自行研发的协议。
HTTP 2.0:2015年发布,SPDY协议的主要特性也在其中。
①使用二进制格式传送数据,不再使用文本格式传送数据。
②对消息头采用了压缩算法。
③采用了多路复用技术,即使用一个TCP连接处理多个请求,真正实现了并发请求
④支持server push,服务端可以主动把css、jsp主动推送到客户端,不需要客户端解析HTML
(各个版本特性在一次面试有涉及到,当时未回答上来)
特点:
(1)支持C/S(客户/服务器)模式
(2)简单快捷:客户向服务器发送请求,只需要传送请求方法和路径。请求方法一般有GET、POST、HEAD,每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器程序规模小,因而通信速度快。
(3)灵活:HTTP允许传输任意类型的数据对象。
(4)无连接:限制每次连接只处理一个请求。服务器处理完客户的请求,并受到客户的答复之后,即断开连接,采用这种方式节省传输时间。
(5)无状态:指协议对于事务处理没有记忆能力。缺少状态则意味着如果后续处理需要前面的信息,则它必须重传,这样导致每次连接传送数据量增大;另一方面,在服务器不需要先前信息的时候,他的应答速度就会很快。
HTTPS
超文本传输安全协议
HTTPS是以安全为目标的HTTP通道,在HTTP基础上通过加密传输和身份认证保证传输的安全性。HTTPS在HTTP基础下加入SSL层。
原理
HTTP原理:
(1)客户端的浏览器首先通过网络与服务器建立连接,该连接是通过TCP来完成的,一般TCP端口号为80。建立连接后,客户机发给服务器一个请求,请求方式为:统一资源标识符(URL)、协议版本号,后面是MIME信息,包括请求修饰符、客户机信息和许可内容。
(2)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后面是MIME信息,包括服务器信息、实体信息和可能的内容。
HTTPS原理:
(1)客户端将他所支持的算法列表和一个用作产生密钥的随机数发送给服务端。
(2)服务端从算法列表中选择一种加密算法,并将它和包含服务器公钥的证书发送给客户端,该证书还包含了用于认证目的的标识,,服务器同时还提供了用于生产密钥的随机数。
(3)客户端对服务器证书进行认证,并抽取到服务器的公钥,然后产生一个随机密码串,并使用服务器的公钥对其进行加密,并将加密后的信息发送给服务器。
(4)客户端和服务端根据随机密码串以及客户端与服务器的随机数值计算加密和MAC密钥
(5)客户端将所有握手的MAC值发送给服务端
(6)服务端将所有握手的MAC值发送给客户端
面试题整理
1.https与http的区别
①https需要CA证书,一般很少有免费的证书。
②http是超文本传输协议,信息是明文传输;https则是具有安全性的ssl加密传输协议。
③http与https是两种完全不同的连接方式,端口也不同,http为80,https为443.
④http是无状态连接;https则是由ssl加密+http协议构建可加密传输、身份认证的的网络协议,比http安全。
2.HTTPS通信过程
https在通信时首先建立ssl层连接,客户端将ssl版本号和加密组件发送到服务器,服务器收到ssl版本号以及加密组件进行匹配,同时将CA证书发送到客户端。客户端对证书进行验证,验证通过后使用非对称加密对通信时的密钥进行协商,协商一致后得到对称加密密钥,然后使用对称加密算法进行TCP连接。
①客户端与服务端通过TCP连接
②客户端向服务端发送HTTPS请求
③服务端响应请求,并将CA证书发送给客户端,证书中包含服务器公钥、域名、申请证书的公司。
④客户端收到CA证书之后进行验证
⑤如果验证通过客户端会生成一个用于对称加密的密钥,之后使用服务器的公钥对其进行非对称加密。
⑥客户端会发起HTTPS中的第二个HTTP请求,将公钥加密后的密钥发送给服务器。
⑦服务器收到之后采用非对称解密,得到客户端的密钥,并使用密钥进行对称加密,生成密文并发送给客户端。
⑧客户端收到密文,通过对称解密密文,渲染网页。
流程图如下:
3.POST与GET区别
POST | GET |
POST一般用于添加或者更新资源信息 | GET一般用于查询操作,而且应该是安全和幂等的 |
POST更加安全 | GET会把请求信息放入到URL中 |
POST传输量无大小限制 | GET不能大于2KB |
POST执行效率低 | GET执行效率略高 |
为什么POST效率低,而GET效率高呢?
①GET将参数拼接成URL,放到header消息头里传递。
②POST直接以键值对形式放到消息体中进行传递。
③两者效率差距其实很小。
4.HTTP各个版本特性及区别。
该答案在文章上面已经说过了