关于HTTP、HTTPS的个人理解

209 阅读4分钟

什么是http协议

http协议是一种超文本传输协议,它是互联网上应用最为广泛的一种网络协议,工作在应用层,基于TCP协议之上,是浏览器和服务器之间信息传递的规范,默认端口为80,https默认端口为443。

http协议的发展

http协议目前共有五个版本,分为http0.9、http1.0、http1.1、http2.0、http3.0,其中http1.0、http1.1目前应用最为广泛。

http1.0、http1.1、http2.0之间的区别

  • http1.0、http1.1之间的区别

    • host域:在http1.0中认为每台服务器都绑定唯一的IP地址,因此请求消息中的URL并没有传递主机名,但是随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,并且它们共享一个IP地址,在http1.1的请求消息和响应消息都应支持host域,且请求消息中如果没有host头域会报告一个错误
    • 长连接:http1.0默认使用短连接,每次请求都需要建立新的TCP连接,任务结束就中断连接,连接不能复用,http1.1默认使用长连接,增加Connection字段,对于同一个host域,客户端和服务器端通过设置Keep-Alive保持http连接不断
    • 管道机制:http1.1引入了管道机制,即在一个TCP连接里,客户端可以同时发送多个请求,进一步提高了http的效率
    • 节约宽带:http1.0不支持断点续传,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,http1.1支持断点续传,在请求头引入了range域,它允许只请求资源的某个部分
  • http1.1、http2.0之间的区别

    • 二进制:http1.x协议解析是基于文本,http2.0协议解析是基于二进制,基于文本的解析存在天然缺陷,文本的表现形式有多样性,要做到健壮需考虑的场景非常多,二进制则只认0和1,实现了既方便又健壮
    • 多路复用:http2.0通过多路复用技术,实现同一个连接并发处理多个请求,并且并发处理的数量比http1.1大了好几个量级,http1.1也可以通过建立多个TCP连接来实现并发处理多个请求,但建立TCP连接本身也需要一定的开销
    • header数据压缩:http1.x的header带有大量信息,而且每次都要重复发送,http2.0使用hpack算法对header数据进行压缩,双方各自缓存一份索引表,既避免了重复header的传输,又减小了需要传输的大小
    • 服务端推送:服务器除了最初请求的响应外,服务器还可以额外向客户端推送资源,而无需客户端明确的需求,客户端就可以在本地加载这些资源,无需在通过网络请求

什么是https协议

https是以安全为目标的http,简单的讲就是http的安全版,即在http下加入ssl层,https的安全基础是ssl

为什么https传输数据比http更安全

http是明文传输,在传输的每一个环节,数据都有可能被第三方窃取或者篡改,而https在数据传输过程中。数据是经过sll层加密处理的

加密方式

  • 对称加密: 对称加密是最简单的方式,指的是加密和解密用的的是同样的密钥
  • 非对称加密: 非对称加密指的是如果有A、 B两把密钥,如果用A加密过的数据包只能用B解密,反之,如果用B加密过的数据包只能用A解密

加密具体流程

  • 对称加密

    • 浏览器发送给服务器一个随机数client_rendom和一个加密方法的列表
    • 服务器接收后给浏览器返回另一个随机数server_rendom和加密方法
    • 两者拥有三样相同的凭证: client_rendom、server_rendom和加密方法
    • 浏览器用加密方法将client_rendom和server_rendom加密,生成与服务器通信的暗号
    • 服务器用加密方法对暗号进行解密
  • 非对称加密

    • 浏览器发送给服务器一个随机数client_rendom和一个加密方法的列表
    • 服务器接收后给浏览器返回另一个随机数server_rendom、加密方法和公钥
    • 两者拥有三样相同的凭证: client_rendom、server_rendom和加密方法
    • 浏览器用公钥和加密方法将client_rendom和server_rendom加密,生成与服务器通信的暗号
    • 服务器用私钥和加密方法对暗号进行解密
  • 对称加密与非对称加密的结合

    • 浏览器发送给服务器一个随机数client_rendom和一个加密方法的列表
    • 服务器接收后给浏览器返回另一个随机数server_rendom、加密方法和公钥
    • 浏览器接收后生成另一个随机数pre_random,用公钥加密后传给服务器
    • 服务器用私钥解密pre_random
    • 两者拥有三样相同的凭证: client_rendom、server_rendom、pre_random和加密方法
    • 浏览器用加密方法将client_rendom、server_rendom、pre_random加密,生成与服务器通信的暗号
    • 服务器用加密方法对暗号进行解密