Go语言学习笔记(五) | 青训营笔记

103 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记

本篇笔记的主要内容是简单介绍《HTTP框架修炼之道》课程的学习笔记,主要简单解释HTTP框架无连接和无状态的理解

HTTP

HTTP是一个属于应用层的面向对象的协议,HTTP协议一共有五大特点:

  1. 支持客户/服务器模式;
  2. 简单快速;
  3. 灵活;
  4. 无连接;
  5. 无状态;

无连接

限制每次连接只处理一个请求,服务器处理完客户的请求,并收到用户的应答后就断开连接。不同的请求之间相互独立。这样做的优点是节约传输时间。

随着互联网的发展,一台服务器同一时间处理的请求越来越多,如果依然采用原来的方式,将会在建立和断开连接上花费大部分时间;为了避免这一劣势,

HTTP/1.0时代

持久连接被提出来,即当一个TCP连接服务器多次请求,客户端会在请求Header中携带Connection:Keep-Alive,向服务器请求持久连接,如果服务端允许就会在响应报文中加上相同的字段。

HTTP/1.1时代

持久连接称为了默认的连接方式,同时持久连接的弊病也展现出来,即所有的连接都是串行的,当某一个请求阻塞时就会导致同一条连接的后续请求被阻塞。

无连接的含义也可以结合HTTP无状态的含义在应用层面上去理解:

每一个请求都拥有自己的请求体,期望接收到唯一的对应的响应体,而每一次的请求都相互独立,与上一次或下一次的请求毫无关系,哪怕是在同一条连接中(后面说的长连接)。也正因为这个特性,我们在考虑业务代码实现的时候,无需考虑请求之间的关系,只需考虑业务是如何在当前请求完成的。而HTTP真正的连接,根据计算机网络体系的协议栈可知,是通过运输层的TCP协议实现的,下层向上层提供了可靠的连接,上层屏蔽了下层的具体实现,所有的操作均在可靠的连接基础之上。HTTP使用TCP的目的是为了保证数据传输的可靠性和完整性。

简单来说就是:

  • TCP的面向连接是基于网络底层的数据传输。
  • HTTP的无连接是基于应用层面的沟通交互。

无状态

HTTP协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,(服务器不会去记得你),另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP协议这无状态有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。