目录
一.http和https发展历史
1.HTTP
超文本传输协议,是一个基于请求于响应,无状态的,应用层的协议,常基于Tcp/IP协议
传输数据,互联网上应用最为广泛的一种网络协议,所有的www文件都必须遵守这个标准
,设计http的初衷是为了提供一种发布和接收HTML页面的方法。
HTTP/0.9:不涉及数据包传输,规定客户端和服务器之间通信格式,只能GET请求
HTTP/1.0:传输内容格式不限制,增加PUT,PATCH,HEAD,OPTIONS,DELETE命令
HTTP/1.1:持久连接,节约带宽,HOST域,管道机制,分块传输编码
HTTP/2:多路复用,服务器推送,头信息压缩,二进制协议等
http报文格式
2.HTTPS
HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,
经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。https使用的主要目的是提供
对网络服务器的身份认证,同时保护交换数据的隐私与完整性。
- HTTP与HTTPS
http特点:
1.无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
2.无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。
3.基于请求和响应:基本的特性,由客户端发起请求,服务端响应
4.简单快速、灵活
5.通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性
(注意)HTTP协议传输数据以明文形式显示
对于无状态的一些解决方法:
通过Cookie/Session技术
HTTP/1.1持久连接方法,只要任意一端没有明确提出断开连接,则保持TCP连接状态,在请求首部字段中的Connection: keep-alive即为表明使用了持久连接
https特点:
基于http协议,通过SSL或TLS提供加密处理数据,验证对方身份以及数据完整性保护
数据不是明文传输,且有如下特点:
内容加密:采用混合加密技术,中间者无法查看明文内容
验证身份:通过证书认证客户端访问的是自己的服务器
保护数据完整性:防止传输的内容被中间人冒充或者篡改
二.http通信传输
客户端输入URL回车,DNS解析域名得到服务器的IP地址,服务器在80端口监听客户端请求,端口通过TCP/IP协议(可以通过Socket实现)建立连接。HTTP属于TCP/IP模型中的运用层协议,所以通信的过程其实是对应数据的入栈和出栈。
报文从运用层传送到运输层,运输层通过TCP三次握手和服务器建立连接,四次挥手释放连接。
为什么需要三次握手呢?
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。比如:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段,但是server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求,于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了,由于client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据,但server却以为新的运输连接已经建立,并一直等待client发来数据。所以没有采用“三次握手”,这种情况下server的很多资源就白白浪费掉了。
为什么需要四次挥手呢?
TCP是全双工模式,当client发出FIN报文段时,只是表示client已经没有数据要发送了,client告诉server,它的数据已经全部发送完毕了;但是,这个时候client还是可以接受来server的数据;当server返回ACK报文段时,表示它已经知道client没有数据发送了,但是server还是可以发送数据到client的;当server也发送了FIN报文段时,这个时候就表示server也没有数据要发送了,就会告诉client,我也没有数据要发送了,如果收到client确认报文段,之后彼此就会愉快的中断这次TCP
连接。
三.https实现原理
- client向server发送请求https://baidu.com,然后连接到server的443端口,发送的信息主要是随机值1和客户端执行的加密算法
- server接收到信息之后给予client响应握手信息,包括随机值2和匹配好的协商加密算法,这个加密算法一定是client发送给server加密算法的子集
- 随即server给client发送第二个响应报文是数字证书。服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问
- 客户端解析证书,这部分工作是由客户端的TLS来完成的
- 客户端认证证书通过之后,接下来是通过随机值1、随机值2和预主秘钥组装会话秘钥。然后通过证书的公钥加密会话秘钥。
- 传送加密信息,这部分传送的是用证书加密后的会话秘钥,目的就是让服务端使用秘钥解密得到随机值1、随机值2和预主秘钥。
- 服务端解密得到随机值1、随机值2和预主秘钥,然后组装会话秘钥,跟客户端会话秘钥相同
- 客户端通过会话秘钥加密一条消息发送给服务端,主要验证服务端是否正常接受客户端加密的消息。
- 同样服务端也会通过会话秘钥加密一条消息回传给客户端,如果客户端能够正常接受的话表明SSL层连接建立完成了。