HTTP协议是无状态协议

转载 2015年11月17日 22:12:01
无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而另一个则是Session。HTTP本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是Cookie和Session了。
Cookie
Cookie是通过客户端保持状态的解决方案。从定义上来说,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。让我们说得更具体一些:当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response Body)中的,而是存放于HTTP响应头(Response Header);当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置,对于Windows操作系统而言,我们可以从: [系统盘]:\Documents and Settings\[用户名]\Cookies目录中找到存储的Cookie;自此,客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器。而这次,Cookie信息则存放在HTTP请求头(Request Header)了。

Session
有了Cookie这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。通常,我们可以从很多网站的登录界面中看到“请记住我”这样的选项,如果你勾选了它之后再登录,那么在下一次访问该网站的时候就不需要进行重复而繁琐的登录动作了,而这个功能就是通过Cookie实现的。
与Cookie相对的一个解决方案是Session,它是通过服务器来保持状态的。由于Session这个词汇包含的语义很多,因此需要在这里明确一下 Session的含义。首先,我们通常都会把Session翻译成会话,因此我们可以把客户端浏览器与服务器之间一系列交互的动作称为一个 Session。从这个语义出发,我们会提到Session持续的时间,会提到在Session过程中进行了什么操作等等;其次,Session指的是服务器端为客户端所开辟的存储空间,在其中保存的信息就是用于保持状态。从这个语义出发,我们则会提到往Session中存放什么内容,如何根据键值从 Session中获取匹配的内容等。
要使用Session,第一步当然是创建Session了。那么Session在何时创建呢?当然还是在服务器端程序运行的过程中创建的,不同语言实现的应用程序有不同创建Session的方法,而在Java中是通过调用HttpServletRequest的getSession方法(使用true作为参数)创建的。在创建了Session的同时,服务器会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来重新获得已经创建的Session;在Session被创建之后,就可以调用Session相关的方法往Session中增加内容了,而这些内容只会保存在服务器中,发到客户端的只有Session id;当客户端再次发送请求的时候,会将这个Session id带上,服务器接受到请求之后就会依据Session id找到相应的Session,从而再次使用之。正是这样一个过程,用户的状态也就得以保持了。
综上所述,HTTP本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是Cookie和Session了。

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

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

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

Http是一个无状态协议,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的所有信息外,该环境不保存与会话有关的任何信息。 自己的理解,在...
  • zzc13142ll
  • zzc13142ll
  • 2015年07月01日 10:08
  • 725

http为何为无状态协议

http无状态还是web应用无状态 我们通常说的web应用程序的无状态性的含义是什么呢? 直观的说,“每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前...
  • wu1991924
  • wu1991924
  • 2013年01月28日 10:47
  • 1215

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

HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态。 无连接 无连接的含义是限制每次连接只处理一个...
  • tennysonsky
  • tennysonsky
  • 2015年03月23日 16:00
  • 8161

HTTP协议之无连接与无状态

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

浅谈HTTP的无状态性

HTTP是Hyper Text Transfer Protocol的缩写,顾名思义,这个协议支持着超文本的传输。那么什么是超文本呢?说白了就是使用HTML编写的页面。通常,我们使用客户端浏览器访问服务...
  • leo777
  • leo777
  • 2007年09月11日 11:28
  • 5507

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

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

Cookie工作过程& HTTP无状态协议分析与Cookie的关系

转自:  当在用户在浏览器地址栏中键入了一个Web站点的URL时,浏览器会向该Web站点发送一个读取网页的请求,并将结果在用户显示器上显示。这时该网页在用户计算机上寻找对应这个网站设置的Co...
  • mijinghjb
  • mijinghjb
  • 2014年04月23日 18:12
  • 1448

HTTP协议:无状态协议

一、定义协议的状态是指下一次传输可以“记住”这次传输信息的能力。HTTP属于无状态协议 为什么? HTTP是不会为了下一次连接而维护这次连接所传输的信息,这是为了保证服务器内存。 ...
  • wd2014610
  • wd2014610
  • 2017年09月27日 20:20
  • 79

HTTP协议与状态保持

HTTP协议与状态保持 HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录彼此过去的行为,每...
  • guoqingcun
  • guoqingcun
  • 2013年10月14日 10:48
  • 3194
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HTTP协议是无状态协议
举报原因:
原因补充:

(最多只允许输入30个字)