HTTP的持久连接、管线化技术、Cookie技术

以下内容均为本人学习笔记,若有错误,欢迎指正

HTTP的持久连接


HTTP最初的版本中,每进行一次HTTP通信,就要断开一次TCP连接。
以当年的通信情况来看,因为都是一些小的文本传输,所以这样并没有多大问题。随着HTTP的普及,文档中包含的图片越来越多,比如,当你浏览一个包含多张图片的的HTML页面时,在发送访问HTML页面同时,也会发送包含该页面的其他资源,这样每次的请求都会造成无谓的TCP连接建立和断开,增加通信量的开销。

为解决上述问题,HTTP/1.1和部分HTTP/1.0增加了持久连接(HTTP Persistent Connections )的方法,其特点是,只要一方未明确提出断开连接,则另一方保持TCP连接状态。


这样的话,就减少了TCP连接的重复建立连接和断开连接的开销,减轻服务器的负载,另外,减少开销的那部分时间,HTTP请求和响应能够更早的结束,这样,Web页面显示速度也就提高了。
在HTTP/1.1中,所有的连接默认都是持久连接,包含服务器端和客户端。
但是在HTTP/1.0中未标准化,虽然有一部分服务器通过非标准手段实现的持久连接,但客户端不一定支持持久连接。

HTTP的管线化技术


管线化是指将多个HTTP请求整批发送,在发送过程中不用等待对方响应
很明显管线化是在持久连接的基础上实现的,管线化的实现,能够同时并行发送多个请求,而不需要一个接一个的等待响应。并且只有GET和HEAD请求可以进行管线化,而POST则有所限制。此外,初次创建连接时也不应启动管线机制,因为对方(服务器)不一定支持HTTP/1.1版本的协议。

浏览器提交批量的HTTP请求可以缩短页面加载时间。此技术的关键在于HTTP的要求消息可以同时塞入一个TCP分组中,所以只提交一个分组即可同时发出多个要求。
例如,请求一个包含多张图片的HTML页面时,与逐一连接相比,用持久连接可以让请求更快结束,而管线化技术则更快,并且请求越多,时间差越明显。

HTTP的Cookie技术


HTTP本身是不保存状态的,它不对之前的请求和响应的状态进行管理,就是说,无法根据之前的状态进行本次的请求处理。
假设要求登录认证的Web页面本身无法进行状态管理,不进行状态保存,那么每次跳转到新页面就要重新登录。

不可否认,无状态协议的优点也是显而易见的,因为不用保存状态,自然可以减少服务器的CPU及内存资源的消耗

那么如何解决上面的矛盾问题呢?


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

  • Cookie会根据服务器发来的响应报文中一个叫做Set Cookie的首部字段信息通知客户端保存Cookie信息(该信息一般问客户端的身份信息等)
  • 当下次客户端再往该服务器上发送请求时,客户端会自动将Cookie信息加入请求报文中发送出去
  • 服务器端发现客户端发来的Cookie后,会去检查是哪一个客户端发来的Cookie,经对比服务器上的记录后,最后得到该客户端之前的状态信息。

猜你喜欢

转载自blog.csdn.net/Misszhoudandan/article/details/80967033