如何理解HTTP协议中的无状态和无连接

HTTP协议又称为超文本传输协议;是OSI模型中第七层应用层中的协议,具体具有以下特点:

1、支持客户/服务器模式

2、简单快速

3、灵活

4、无连接

5、无状态

这里我们主要解释无连接和无状态的特点:

无连接:

  是指每次连接只处理一个请求。服务器处理完客户的请求,并收到客户端的应答后便断开连接;这种方式有利于节省传输时间。

早期这么做的原因是HTT协议产生于互联网,因此服务器需要同时处理面向全世界数十万、百万的客户端请求的网页访问,但每个客户端(即浏览器)与服务器之间交换数据的间歇性较大(即传输具备突发性、瞬时性),并且网页浏览的联想性、发散性导致两次传送的数据关联性低,大部分通道实际上会很空闲,无端占用资源。因此HTTP的设计者有意利用这个特点将协议设计为请求时建立连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。

随着时间的推移,网页变得越来越复杂,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次TCP连接就显得很低效。后来keep-alive被提出来解决低效率的问题。

keep-alive 功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,keep-alive 功能避免了建立或者重新建立连接。市场上大部分web服务器包括iPlanet、IIS、Apache都支持keep-alive。对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担比较重的网站来说,这里存在另外一个服务器:虽然为客户保留打开的连接有一定的好处,但是同时它影响了性能,因为在处理暂停期间,本来可以释放的资源仍然被占用。当web服务器和应用服务器在同一台机器上运行时,keep-alive功能对资源的利用影响尤其突出。

这样一来,客户端和服务端之间的HTTP连接就会保持,不会断开(超过keep-alive时间,以外断电情况下会断开),当客户端发送另外一个请求时,就是用这条已经建立的连接。

无状态:

  无状态是指协议对事物处理没有记忆能力,服务器不知道客户端是什么态。即我们给服务器发送HTTP请求之后,服务器根据请求会给我们发送数据过来,但是发送完,不会记录任何信息。

HTTP是一个无状态的协议,这意味着每个请求都是独立的,keep-alive并不能改变这个结果。

缺少状态,意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量大增。另一方面,在服务器不需要先前信息时它的应答就比较快。

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

客户端与服务端进行动态交互的web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP连接状态的技术应运而生,一个是cookie 一个是session

 

cookie可以保持登陆信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登陆了(当然不排除手动删除cookie),而还有些cookie在用户退出会话的时候就被删除了,这样可以有效的保护个人隐私

cookie是存储在客户端的

cookies 最典型的应用是判断注册用户是否已经登陆网站。

 

与cookie相对的一个解决方案是session,他是通过服务端来保持状态的。存储在服务端。

当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时将提示session的SessionID 传送给客户端浏览器,浏览器将这个sessionID保存在内存中,我们称之为无过期时间的cookie。浏览器关闭后,这个cookie就会被清理掉,它不会存在于用户的cookie临时文件。

 

以后浏览器每次请求都会额外加上这个参数值,服务器会根据这个SessionID,就能获取客户端的数据信息。

如果客户端浏览器意外关闭,服务器保存的session数据不是立即释放,此时数据还会存在,只要我们知道那个sessionID,就可以继续通过请求获得此session的信息,因为此时后台的session还存在,当然我们可以设置一个session超时时间,一旦超过规定时间没有客户端请求时,服务器就会清除对应的sessionID的session信息。

posted @ 2021-09-03 15:27  GalaxyStar  阅读(938)  评论(0编辑  收藏  举报