为什么HTTP是无状态的?如何保持状态(会话跟踪技术、状态管理)?
  q8wrrNXNgAWx 2023年11月02日 75 0

HTTP无状态:

无状态是指协议对于事务处理没有记忆能力,不能保存每次客户端提交的信息,即当服务器返回应答之后,这次事务的所有信息就都丢掉了。如果用户发来一个新的请求,服务器也无法知道它是否与上次的请求有联系。

实例解释HTTP的无状态性:

一个包含多图片的网页的浏览:

(1)建立连接,客户端发送一个请求,服务器端返回一个HTML页面(这里的页面只是一个纯文本的页面,也就是我们写的HTML代码),关闭连接;

(2)浏览器解析HTML文件,遇到图片标记得到url,这时,客户端和服务器再建立连接,客户端发送一个图片请求,服务器返回图片应答,关闭连接。【这里又涉及到无状态定义:对于服务器来说,这次的请求虽然是同一个客户端的请求但是服务器还是不知道这个是之前的那个客户端,即对于事务处理没有记忆能力】

优点:

服务器不用为每个客户端连接分配内存来记忆大量状态,也不用在客户端失去连接时去清理内存,节省服务器端资源,以更高效地去处理业务。

缺点:

缺少状态意味着如果后续处理需要前面的信息,则客户端必须重传,这样可能导致每次连接每次连接传送的数据量增大。

解决HTTP无状态的方法:

针对这些缺点,可以采用会话跟踪技术来解决这个问题。把状态保存在服务器中,只发送回一个标识符,浏览器在下次提交中把这个标识符发送过来;这样,就可以定位存储在服务器上的状态信息了。

有四种会话跟踪技术: 

  • COOKIE
  • Session
  • URL 重写
  • 作为隐藏域嵌入HTML表单中(隐藏表单域)

在浏览器和服务器之间来回传递一个标识符,这就是所谓的会话(session)跟踪。来自浏览器的所有包含同一个标识符(这里是SESSIONID)的请求同属于一个会话。

  会话的有效期直到它被显式地终止为止,或者当用户在一段时间内没有动作,由服务器自动设置为过期。

  目前没有办法通知服务器用户已经关闭浏览器,因为在浏览器和服务器之间没有一个持久的连接,并且浏览器关闭时也不向服务器发送信息。

  同时,关闭浏览器通常意味着会话ID丢失,COOKIE将过期,或者注入了信息的URL将不能再使用。

  所以当用户再次打开浏览器的时候,服务器无法将新得到的请求与以前的会话联系起来,则只能创建一个新的会话。

  然而,所有与前一个会话有关的数据依然存在服务器上,直到会话过期被清除为止。

去期待陌生,去拥抱惊喜。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
q8wrrNXNgAWx
最新推荐 更多