如何理解HTTP协议的 “无连接,无状态” 特点?

标签: http协议 Session Cookie
8751人阅读 评论(0) 收藏 举报
分类:

HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态


无连接

无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。


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


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


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


这样一来,客户端和服务器之间的 HTTP 连接就会被保持,不会断开(超过 Keep-Alive 规定的时间,意外断电等情况除外),当客户端发送另外一个请求时,就使用这条已经建立的连接。


无状态

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

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

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

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

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


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

Cookies 最典型的应用是判定注册用户是否已经登录网站,用户可能会得到提示,是否在下一次进入此网站时保留用户信息以便简化登录手续,这些都是 Cookies 的功用。另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入 Cookies,以便在最后付款时提取信息。


与 Cookie 相对的一个解决方案是 Session,它是通过服务器来保持状态的。

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

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

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

查看评论

HTTP协议之无连接与无状态

前言     HTTP协议一共有五大特点,1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态。其中无状态是其中主要特点之一。因此,常说HTTP是一个无状态协议。所谓的无状态是指...
  • hsd2012
  • hsd2012
  • 2016-04-07 11:10:13
  • 2686

http的无状态无连接到底是什么含义

无连接:服务器处理完客户的请求,并收到客户的应答后,即断开连接。 早期这么做的原因是 HTTP协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问,但每个客户端(即...
  • bingjing12345
  • bingjing12345
  • 2013-08-07 17:27:34
  • 17405

http无连接、无状态以及解决方案

http无状态无连接,以及相应的解决方法
  • dadaxiongdebaobao
  • dadaxiongdebaobao
  • 2016-08-11 15:06:55
  • 1050

深入理解HTTP协议(一)——基础概念篇

1.介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。它的发展是万维网协会(World Wide Web Consortium)和Intern...
  • huangjianxiang1875
  • huangjianxiang1875
  • 2015-03-07 16:37:30
  • 1804

关于“无状态的HTTP连接提供有状态的连接

HTTP是无状态链接,请求-回应完毕后客户端和服务器之间的链接就会断开。那么服务器是如何记住用户的,例如网上购物车,每次新添加购物项,上次添加的 购物项还能存在,这是如何实现的?可以推测应该是客户端或...
  • huojiao2006
  • huojiao2006
  • 2016-12-13 16:19:33
  • 490

如何理解HTTP协议的 “无连接,无状态” 特点?

HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态。 无连接 无连接的含义是限制每次连接只处...
  • fengyinchao
  • fengyinchao
  • 2016-03-01 18:38:03
  • 2668

HTTP协议是无状态协议,怎么理解?

Http是一个无状态协议,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的所有信息外,该环境不保存与会话有关的任何信息。 自己的理解,在asp...
  • yzl21061
  • yzl21061
  • 2013-12-18 18:13:44
  • 3212

tcp协议是面向连接的,而http是无状态的,面向连接和无状态怎么感觉好像优点矛盾呢?

 不矛盾,一个是面向链接的,一个是无连接的。面向链接的可靠些,无连接的就不那么可靠。主要是因为这两个协议所处的层不一样。互联网的设计者认为,用户层应是简单的,直接的。所以无连接的设计能够简化设备的成本...
  • lcj8
  • lcj8
  • 2008-10-30 13:20:00
  • 5357

我的android审视之旅-----http的无状态和tcp的基于连接

最近随便看了一些博客,就是一些关于http的框架,其中retrofit+okhttp+rxjava好火,可能是因为其中涉及到一种比较清晰的设计模式——观察者模式吧。         抱着这种态度,决...
  • menglinxilx
  • menglinxilx
  • 2016-10-31 13:48:55
  • 193

关于http请求无状态无连接的理解

今天了解对http请求的无状态无连接有一定的疑惑。发现了一篇写的挺好的博客,转载: http://www.cnblogs.com/bellkosmos/p/5237146.html 引子:...
  • qq_28663043
  • qq_28663043
  • 2017-04-15 10:38:37
  • 360
    相关声明
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 579万+
    积分: 2万+
    排名: 383
    博客专栏
    最新评论