《图解HTTP》读书笔记

  这本《图解HTTP》是一本通俗易懂的读物,结合了生动形象的漫画插图,非常适合快速的了解HTTP协议的相关内容。想进一步深入了解HTTP,应该看《HTTP权威指南》这一本书,但是鉴于近期忙着准备面试的事宜,所以我挑选了这本厚度适宜又看上去有趣的书。我前后花了5个多小时速读了此书大部分的内容,虽然没有整本书细细看,但之后有空会再多去翻阅并继续完善这篇随笔的。


HTTP协议

  首先,作为一本讲解HTTP的书籍,我们第一个要了解的概念就是HTTP(HyperText Transfer Protocol,超文本传输协议)。
简单来说,HTTP是一种协议,即规则的约定。我们每天打交道的Web就是将HTTP协议作为规范,完成从客户端到服务器端一系列操作的运作流程。所以说web是建立在HTTP协议上通信的。

TCP/IP协议族

  为了理解HTTP,我们先来了解一下TCP/IP协议族,通常使用的网络(包括互联网)多是在TCP/IP协议族的基础上运作的。而HTTP属于它内部的一个子集。一般,把与互联网相关的协议集合起来总成为TCP/IP。也有说法认为,TCP/IP是指TCP和IP这两种协议。

 

 

TCP/IP的分层管理

  • 应用层:决定了向用户提供应用服务时通信的活动/协议

   比如:HTTP(HyperText Transfer Protocol,超文本传输协议)
      FTP(File Transfer Protocol,文件传输协议)
      DNS(Domain Name System,域名系统)

  • 传输层:提供处于网络连接中的两台计算机之间的数据传输

      TCP(Transmission Control Protocol,传输控制协议)
      UDP(User Data Protocol,用户数据协议)

  • 网络层(又名网络互连层):选择一条传输路线,并将数据包传送到指定目标

      IP(Internet Protocol,网际协议)

  • 链路层(又名数据链路层,网络接口层):用来处理连接网络的硬件部分

      包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。

 

TCP/IP通信传输流

 

  利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则从应用层往上走。

  我们用HTTP举例来说明,首先作为发送端的客户端在应用层(HTTP协议)发出想查看某个Web页面的HTTP请求。

  接着,为了传输方便,在传输层(TCP协议)将从应用层接受到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记排好序号及端口号后转发给网络层。

  在网络层(IP协议)下,增加作为通信目的地的MAC地址后转发给链路层。这样,发往网络的通信请求就准备齐全了。

  接收端的服务器在链路层接受到数据之后,按序往上发送数据,一直到应用层。当传输到应用层,才能算真正接受到客户端发送过来的HTTP请求。

 

 

  发送端在层与层之间传输数据时,每经过一层就会打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层,就会把相对应的首部信息消去。

  这种把数据信息包装起来的做法成为封装(encapsulate)。

负责传输的IP协议

  IP协议的作用是把各种数据包传送给对方。要保证确实传送到对方那里,要满足各类条件,其中最重要的2个条件就是IP地址和MAC地址(Media Access Control Address)。

  IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可变换,但MAC地址基本上不会改变。

 

 

确保可靠性的TCP协议

  为了传输方便,将大块数据割成以报文段为单位的数据包进行管理。TCP能提供可靠的传输服务,能够将数据准确可靠地传给对方。总而言之,TCP协议为了更容易传送大数据才把数据分割,而且TCP协议能够确认数据最终是否送达到目标处。

  为了准确无误地将数据送达目标处,TCP协议采用了三次握手策略(three-way handshaking)。

 

三次握手

负责域名解析的DNS服务

  DNS服务和HTTP协议一样位于应用层。它提供域名到IP地址之间的解析服务。计算机既可以被赋予IP地址,也可以被赋予主机名和域名。对于用户来说,我们通常使用域名来访问对方的计算机,因为比起一串数字,域名更加的直观,更加方便记忆。而对于计算机来说,要让它们理解域名就显得很困难了,它们更擅长于处理一长串的数字。为了解决这个问题,DNS服务应运而生。它提供通过域名查找IP地址,也可以通过IP地址查找域名。

 

各种协议与HTTP协议的关系

  在了解了IP协议、TCP协议和DNS服务之后,我们通过下面这张图来了解一下它们在使用HTTP协议进行通信的时候,各自发挥的作用。

 

各种协议与HTTP协议的关系

 HTTP是无状态协议

  HTTP是一种不保存状态,即无状态(stateless)协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。

 

HTTP是无状态协议

  HTTP协议本身不保存之前一切的请求或者响应报文的信息,这是为了更快的处理大量事务。可是随着Web的不断发展,因为无状态而导致的业务处理变得棘手的情况明显增多了。比如,用户登录到一家购物网站,当他跳转到该网址的其他页面的时候,由于HTTP是一种无状态协议,所以他需要重新进行登录,这样造成了很大的不方便。为了实现保持状态,在HTTP/1.1中,虽然还是无状态协议,但是引入了Cookie技术。有了Cookie再用HTTP协议通信时,就可以进行状态管理了。

  Cookie会根据从服务器端发送的响应报文内一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当客户端再一次向服务器发送请求时,客户端会自动再请求报文中添加Cookie的值再发送请求。

   第1次,没有Cookie信息状态下的请求

  第2次以后(保存Cookie信息状态)的请求

持久连接节省通信量

  HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。随着HTTP的普及和互联网的发展,在网络上传输的信息,不再只有简单的文本,而是包含大量的图片以及视频。而每次请求都会造成无谓的TCP连接的建立和断开,增加了通信量的开销。

 

 

 

  为了解决上诉问题,HTTP/1.1 增加了持久连接(HTTP Persistene Connections,也称为HTTP keep-alive)方法。

 

持久连接节省通信量

管线化

  持久化连接使得多数请求以管线化(pipelining)的方式发送成为可能。从前发送请求后需要等待收到响应后,才能进行下一次请求。而管线化技术出现后,不用等待响应亦能直接发送下一个请求。这样就能同时并行发送多个请求,从而使得请求可以更快完成。

 

管线化

确保Web安全的HTTPS

  由于HTTP协议中没有加密机制,所以使其变得不安全。但是我们可以用过SSL(Secure Socket Layer,安全套件层)或TSL(Transport Layer Serurity,安全传输协议)的组合使用,加密HTTP的用心内容。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)或HTTP over SSL。

 

 HTTPS

密钥加密技术

  近代的加密方法中,加密算法是公开的,而密钥是保密的。加密和解密都需要密钥,没有密钥就不能对密码解密,但是如果密钥被攻击者获得,那加密就失去意义了。像这样加密和解密同用一个密钥的方式称为共享密钥加密,也被称为对称密钥加密。以共享加密方式加密时,必须将密钥发送给对方,那怎样才能确保安全的把密钥转交呢?

  SSL采用了一种叫公开密钥加密的加密处理方式,这种加密方式很好地解决了共享密钥安全移交密钥地难题。公开密钥加密使用了一对非对称地密钥。一把叫做共有密钥,另一把叫做私有密钥。公开密钥可以随意发布,让任何人都可以获得,使用公开密钥加密方式时,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用私钥进行解密,这样就确保了安全性。

  如此一来,我们就可以使用公开密钥加密的方式对共享密钥中的密钥进行安全移交,所以这样就能进行安全地交换信息了。但是公开密钥加密与共享密钥加密相比,其处理速度更慢。所以HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。这样既确保了安全性,又保证了较快的处理速度。

 

HTTPS加密方式

 

  暂时写到这里,这是我第一篇博客文章,虽然花了2个多小时,但是很开心自己能够通过这种方式记录自己得到的知识,并且有可能帮助到有需要的人。以后,当我读完一本书的时候,要把知识点或者心得体会记录下来,这样才是读完一本书有所得。一点一滴记录自己的成长,想看更多的书,让自己慢慢变得强大无比,加油!

posted @ 2018-03-16 00:14 Wudj 阅读(...) 评论(...) 编辑 收藏