关于HTTPS的理解 https

带着数据去旅行一次完整的HTTP请求在讲HTTPS之前,我们有必要了解一下HTTP协议 。先看一个完整的HTTP请求:

关于HTTPS的理解 https

文章插图


上面是我用Wireshark工具所抓到的一次完整HTTP请求的样子 。
  • 首先可以看到的是三个TCP协议的数据包,也就是我们常说的TCP三次握手,在这之后,两台电脑之间的连接就建立起来了 。
  • 继续向下就可以看到HTTP请求了,Request和Response一来一回,很好辨认 。大家还可以注意到在每个HTTP数据包之后还跟了一个TCP的包,这是TCP协议的确认,表示告诉发送者:"你刚才的报文我已经收到了" 。
    页面底部显示了一个原始的HTTP GET请求报文的样子,为什么请前面会出现乱码呢?其实前面的乱码就是TCP/IP协议 。不同于HTTP协议可以用字符编码,TCP/IP的传递需要极致压缩数据量,每一个数据位就表示了一种特定的意思,需要使用TCP/IP的规则去解析(就像我们在软件上面页面所看到的解析结果),而不能使用字符编码来阅读 。
什么是分层网络模型互联网发展早期,需要解决的一个重要问题就是电脑之间如何传输数据 。人们需要找到一种大家都认同的规范,每个想要相互连接的计算机都需要按照规范来办事 。这期间有一个协议脱颖而出,他就是现在应用非常广泛的TCP/IP协议,它规定了网络上的计算机要如何找到另一台计算机,并且如何与之建立连接 。TCP/IP的发明者还非常有远见地提出了“网络分层”的概念,将复杂的网络通信划分成了多个层次,每个层次只需要关心自己的问题,将大问题划分为了很多个小问题从而解决了网络通信的难题 。就像我们写代码需要分层一样(Service,Controller,Dao层等等),每一层只需要关注自己的功能 。值得注意的是,TCP/IP协议只有四层,而我们现在经常说起的OSI七层网络模型,是由国际标准组织(ISO)后来才提出来的 。在此之前,虽然TCP/IP协议非常优秀,但是奈何市面上还是各玩各的,所以ISO想要制定一个大一统的协议,在很多细节上进行了细化,成就了我们现在所看到的七层网络模型 。我们简单对比一下OSI七层模型和TCP/IP的四层模型:
关于HTTPS的理解 https

文章插图


虽然OSI七层模型有更细分的设计,但是他也无法撼动TCP/IP已经实行多年的统治地位,所以OSI模型现在更多是一种建议和标准 。在TCP/IP模型中,我们的HTTP协议,TCP协议,IP协议分别位于应用层,传输层和互联网层 。当我们发起一次HTTP请求,浏览器会按照HTTP协议的要求,拼装出HTTP的数据,再调用下层TCP协议提供的API将HTTP数据封装到TCP协议中,再往下针对IP协议再一次封装,最后到达物理网络层,数据被发送出去 。目标主机收到数据以后,反过来将包装好的数据一层一层剥开,最终得到我们要传递的信息,然后再一次将要返回的数据经过层层协议的打包返回到源主机 。
带着保险箱去旅行从上面的基础知识我们不难发现,HTTP协议是非常简单且高效 。
  1. HTTP直接运行在TCP协议之上,依靠TCP来实现自己的稳定性 。
  2. HTTP使用明文传输,数据可读性和可扩展性都非常好 。
但是它的简单高效也成为了一把双刃剑,原始的HTTP请求就像是在网上裸奔,所有信息都是明文传递,毫无安全可言 。随着科技的发展,人们对安全、隐私的要求越来越高,特别是在现在万物互联的时代,敏感信息如果不经过保护直接在网上传播,将造成极大的隐患 。
------在这样的历史浪潮中,HTTPs应运而生 。
HTTPs与HTTP的区别就在这个s上,它代表的是"TLS",既安全传输层协议 。TLS也是运行在TCP之上的应用层协议,但是与一般传输数据的协议不同,TLS所关心的,只有安全 。我们可以认为TLS就是一个运行在TCP上的保险箱,现在我们将需要保护的数据先装入这个保险箱,再经过TCP发送出去,就能实现我们对于安全的需求 。我们将HTTP over TCP,变成了HTTP over TLS over TCP 。

秒懂生活扩展阅读