HTTP协议的特点

上篇文章简单介绍了与HTTP关系密切的协议(IP、TCP、DNS),是为了大家对HTTP有一个整体的认识。

做为HTTP协议系列文章,HTTP才是主角。

这一节,我们来谈谈HTTP协议的特点,以及一些不足。

客户端 & 服务端

网络世界中的两台计算机,就像现实世界中的两个陌生人一样,要想搭上关系,首先得先说上话。

在网络世界中,先开口的,被称为客户端。而做出回应的,被称为服务端。

也就是说,在一条通信线路上,客户端用于请求资源,服务端用于提供资源。

事实上,HTTP协议还规定了:

  • 在一条通信线路上必定有一端是客户端,另一端是服务器端。
  • 请求从客户端发出,服务器端响应请求并返回。也就是说,请求肯定是先从客户端开始建立通信的,服务器端在没有接收请求之前不会发送响应。

关于这两点,请先有个印象,后面谈到HTTP协议的局限性时还会谈到。

无连接

对HTTP有点了解的童鞋应该都知道,HTTP协议是无连接的。

也就是说,每进行一次HTTP通信,都要断开一次TCP连接。

这是因为HTTP诞生之初,主要是为了应付容易很小的文本传输,所以即使这样也没多大的问题。

可随着HTTP的普及,文档中包含大量图片的情况多了起来,每次请求完都要断开TCP连接,无疑增加通信量的开销。

为了解决TCP的连接问题,HTTP1.1提出了持久连接的方法。

所谓的持久连接,就是任意一端只要没有明确提出断开连接,则保持TCP连接状态。

这样一来,就减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务端的负载,Web页面的显示速度也就相应的提高了。

更重要的是,持久连接使得管线化成为可能。从前发送请求后,需要收到响应了才能发送下一个请求。管线化技术出现后,不用等待响应也可以直接发送下一个请求了。

这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应。

管线化的效果是立竿见影的。持久连接可以让请求更快结束,而管线化技术则比持久连接还要快,而且请求数越多,时间差就越明显。

无状态

除了无连接,HTTP的另一个特点是无状态。

也就是说,HTTP协议无法根据之前的状态进行本次的请求处理。

不可否认,不保存状态是有他的优点的,可以减少服务器的CPU及内存资源的消耗。但问题也是显而易见。

假设系统需要登录后才能访问,由于无状态的特点,每次跳转页面都需要重新登录,这是难以想象的。

为了解决无状态的问题,引入了Cookie技术。

Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。

首次访问服务端时,响应报文内会返回一个叫Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。

服务端发现客户端发送过来的Cookie后,会去检查究竟是从哪个客户端发送来的请求,然后对比服务器上的记录,最后得到之前的状态信息。

有关请求报文和响应报文内的Cookie对应的首部字段,接下来还会详细介绍。

最后

最后还要啰嗦一句,现在HTTP的很多问题,看着很费解,你很难想象HTTP协议的设计者为什么会设计出如此漏洞百出的协议。

但就像开头所说的,技术的发展都有其局限性,HTTP协议也是如此。

理解技术的局限性,有利于我们开拓视野,对以后的学习是有帮助的~

好了,今天就到这,感谢您的阅读~

你可能感兴趣的:(HTTP协议的特点)