精华内容
下载资源
问答
  • HTTP协议为什么是无状态的?无状态指的是什么

    千次阅读 多人点赞 2019-03-15 17:59:26
    无状态含义:  无状态是指协议对于事务处理没有记忆功能。缺少状态意味着,假如后面的处理需要前面的信息,则前面的信息必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要前面信息时,...

    摘录自博客 http://blog.sina.com.cn/s/blog_93b45b0f0101a4ix.html

    无状态含义:

      无状态是指协议对于事务处理没有记忆功能。缺少状态意味着,假如后面的处理需要前面的信息,则前面的信息必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要前面信息时,应答就较快。直观地说,就是每个请求都是独立的,与前面的请求和后面的请求都是没有直接联系的。

    实际中的使用情况:

      在web应用中,我们使用http协议,但是我们需要的web是有状态的,因此加入了cookie、session等机制实现有状态的的web。

      web=http协议+状态机制+其他机制

    为什么不改进http协议使之有状态:

      最初的http协议只是用来浏览静态文件的,无状态协议已经足够,这样实现的负担也很轻(相对来说,实现有状态的代价是很高的,要维护状态,根据状态来操作。)。随着web的发展,它需要变得有状态,但是不是就要修改http协议使之有状态呢?是不需要的。因为我们经常长时间逗留在某一个网页,然后才进入到另一个网页,如果在这两个页面之间维持状态,代价是很高的。其次,历史让http无状态,但是现在对http提出了新的要求,按照软件领域的通常做法是,保留历史经验,在http协议上再加上一层实现我们的目的(“再加上一层,你可以做任何事”)。所以引入了其他机制来实现这种有状态的连接。

    哪些方法可以实现有状态连接:

    cookies, session, application

    有人将web应用中有无状态的情况,比着顾客逛商店的情景。

    顾客:浏览器访问方;

    商店:web服务器;

    一次购买:一次http访问

    我们知道,上一次顾客购买,并不代表顾客下一个小时一定会买(当然也不能代表不会)。也就是说同一个顾客的不同购买之间的关系是不定的。所以说实在的,这种情况下,让商店保存所有的顾客购买的信息,等到下一次购买可以知道这个顾客以前购买的内容代价非常大的。所以商店为了避免这个代价,索性就认为每次的购买都是一次独立的新的购买。浅台词:商店不区分对待老顾客和新过客。这就是无状态的。

    但是,商店为了提高收益。她是想鼓励顾客购买的。所以告诉你,只要你在一个月内购买了5瓶以上的啤酒,就送你一个酒杯。

    我们看看这种情况我们怎么去实现呢?

    A,给顾客发放一个磁卡,里面放有顾客过去的购买信息。

    这样商店就可以知道了。这就是cookie.

    B,给顾客发放一个唯一号码,号码制定的顾客的消费信息,存储在商店的服务器中。这就是session。

    最后,商店可以全局的决定,是5瓶为送酒杯还是6瓶。这就是application。

    其实,这些机制都是在无状态的传统购买过程中加入了一点东西,使整个过程变得有状态。Web应用就是这样的。

    展开全文
  • 在面试中被问到HTTP协议是有状态还是无状态的,当场就有点懵,因为不会就没答出来。还是得总结一下啵! 一、HTTP协议的状态 HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。 也就是说,上一次的...

    在面试中被问到HTTP协议是有状态还是无状态的,当场就有点懵,因为不会就没答出来。还是得总结一下啵!


    一、HTTP协议的状态

    HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。

    也就是说,上一次的请求对这次的请求没有任何影响,服务端也不会对客户端上一次的请求进行任何记录处理。

    二、HTTP协议的无状态性带来的问题:

    用户登录后,切换到其他界面,进行操作,服务器端是无法判断是哪个用户登录的。 每次进行页面跳转的时候,得重新登录。

    三、解决方案

    既然HTTP协议是无状态的,不会记录用户信息,那么怎么样才能让HTTP协议记录用户信息呢?换句话说,服务器怎么判断发来HTTP请求的是哪个用户?

    于是,两种用于保持HTTP状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。

    1. Cookie

    Cookie 是客户端的存储空间,由浏览器来维持。具体来说 cookie 机制采用的是在客户端保持状态的方案

    Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。

    Cookie 可以翻译为“小甜品,小饼干” ,Cookie 在网络系统中几乎无处不在,当我们浏览以前访问过的网站时,网页中可能会出现 :你好 XXX,这会让我们感觉很亲切,就好像吃了一个小甜品一样。

    Cookie 的实现过程:

    Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie,当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。

    也就是 Cookie 是服务器生成的,但是发送给客户端,并且由客户端来保存。每次请求加上 Cookie就行了。服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

    2. Session

    Session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话是从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个 Session。然而当 Session 一词与网络协议相关联时,它又往往隐含了“面向连接”或“保持状态”这样两个含义。 

    Session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 Session 保存在服务器上。

    客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是 Session。客户端浏览器再次访问时,只需要从该 Session 中查找该客户的状态就可以了。

    虽然 Session 保存在服务器,对客户端是透明的,它的正常运行仍然需要客户端浏览器的支持。这是因为 Session 需要使用Cookie 作为识别标志。HTTP协议是无状态的,Session 不能依据HTTP连接来判断是否为同一客户,因此服务器向客户端浏览器发送一个名为 JSESSIONID 的 Cookie,它的值为该 Session 的 id(即放在HTTP响应报文头部信息里的Set-Cookie)。Session依据该 Cookie 来识别是否为同一用户。

    3. Cookie 和 Session 的区别

    (1)Cookie 数据存放在客户的浏览器上,Session 数据放在服务器上;

    (2)Cookie 不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用 Session ;

    (3)Session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;

    (4)单个Cookie 在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;

    4. 总结

    如果说 Cookie 机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session 相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

    Cookie 和 Session 的方案虽然分别属于客户端和服务端,但是服务端的 Session 的实现对客户端的 Cookie 有依赖关系的,上面我讲到服务端执行 Session 机制时候会生成 Session 的 id 值,这个 id 值会发送给客户端,客户端每次请求都会把这个 id 值放到 http 请求的头部发送给服务端,而这个 id 值在客户端会保存下来,保存的容器就是 Cookie,因此当我们完全禁掉浏览器的Cookie的时候,服务端的Session也会不能正常使用。

    问:客户端浏览器将 Cookie 功能禁用,或者不支持 Cookie 怎么办?

    一般这种情况下,会使用一种叫做 URL 重写的技术来进行会话跟踪,即每次HTTP交互,URL后面都会被附加上一个诸如 sid=xxxxx 这样的参数,服务端据此来识别用户。

    Cookie 和 Session 应用场景

    (1)登录网站,今输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie。

    (2)session一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了session。

     

    参考文章:

     对session和cookie的一些理解

     理解Cookie和Session机制

    session和cookie的区别

    cookie与session的区别是什么

    展开全文
  • http为什么是无状态

    千次阅读 2020-03-30 16:14:21
    1.http是无状态的 原因:无状态是指 每个请求是独立的,彼此互不影响。 比如静态页面,前后请求不需要进行关联,所以无状态就可以满足业务请求。 对前后请求需要进行状态控制的,就需要状态了。 2.cookie和...

    1.http是无状态的

    原因:无状态是指 每个请求是独立的,彼此互不影响。

         比如静态页面,前后请求不需要进行关联,所以无状态就可以满足业务请求。

           对前后请求需要进行状态控制的,就需要状态了。

    2.cookie和session

    --对http状态的补充,

    需要对请求进行状态标记时,客户端浏览器采用cookie 和服务端session进行关联。

    关联字段 sessionId.

    展开全文
  • 为什么说HTTP协议是无状态

    千次阅读 2018-12-05 18:26:10
    无状态指的是任意一个Web请求必须完全与其他请求隔离,当请求端提出请求时,请求本身包含了相应端相应这一请求所需的全部信息。 无状态 无状态协议是指协议对务处理没有记忆能力。缺少状态意味着如果后续处理...

    无状态指的是任意一个Web请求必须完全与其他请求隔离,当请求端提出请求时,请求本身包含了相应端为相应这一请求所需的全部信息。

    无状态

    无状态协议是指协议对务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 Http协议不像建立了socket连接的两个终端,双方是可以互相通信的,http的客户端只能通过请求服务器来获取相关内容或文件信息。

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

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

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

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

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

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

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

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

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

    展开全文
  • http为何为无状态协议

    千次阅读 2013-01-28 10:47:26
    我们通常说的web应用程序的无状态性的含义是什么呢? 直观的说,“每次的...要明白,这句话的含义是指在说明,http协议作为技术背景的web应用程序请求——应答模式是无状态的,这个事实基本不会发生改变,也不会
  • 什么是有状态登录和无状态登录

    千次阅读 2019-05-14 21:55:29
    1、有状态登录 那缺点是什么? • 服务端保存大量数据,增加服务端压力 • 服务端保存用户状态,无法进行水平扩展 ...• 客户端请求依赖服务端,多次请求必须访问同一...2、无状态登录 服务器不保存用户的登录信...
  • http的无状态无连接到底是什么含义

    万次阅读 多人点赞 2013-08-07 17:27:34
    连接:服务器处理完客户的请求,并收到客户的应答后,即断开连接。 早期这么做的原因是 HTTP协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问,但每个客户端(即浏览器)与...
  • 这个会话指的就是 session对象单点登录的核心技术原理:就是用户浏览器对各个集成在一起的web应用程序的会话session是一致性同步的
  • 本文主要讲一些让系统更简单,更容易维护的东西——「易伸缩」,首当其冲的主题就是「stateless」,也无状态」。 服务的“状态” 无状态的服务 客户端的每次请求必须具备自描述信息,通过这些信息识别客户端身份...
  • 要明白,这句话的含义是指在说明,http协议作为技术背景的web应用程序请求——应答模式是无状态的,这个事实基本不会发生改变,也不会因为加入cookies、session机制而变成有状态的。要明白,这种前后因果关系:...
  • 有状态服务和无状态服务

    千次阅读 2020-08-25 12:51:43
    服务一般分为有状态服务(Stateful Service)和无状态服务(Stateless Service)。它们的区别是,当请求发起后,服务在服务端运行时是否需要关联上下文。 有状态服务,服务端需要保存请求的信息,并且其它请求还可以...
  • 有状态服务 & 无状态服务

    万次阅读 2018-10-26 16:38:42
    无状态服务:就是没有特殊状态的服务,各个请求对于服务器来说统一无差别处理,请求自身携带了所有服务端所需要的所有参数(服务端自身不存储跟请求相关的任何数据,不包括数据库存储信息) 有状态服务:与之相反,...
  • flutter之有状态和无状态组件

    千次阅读 2019-03-04 16:37:01
    无状态组件(StatelessWidget)是不可变的,这意味着它们的属性不能改变,所有的值都是最终的。 有状态组件(StatefulWidget)持有状态可能在Widget生命周期中发生变化。实现一个StatefulWidget至少需要两个类 一个...
  • 举个例子我和朋友出去吃饭 不需要每次报上姓名 联系方式 等 朋友就知道我是谁 这是有状态的 而我去办事大厅 工作人员不会记得我是谁 每次去都要填表 出示身份证 这就是无...HTTP,UDP,FTP都是无状态协议 TCP是有状态协议
  • 有状态和无状态的区别

    千次阅读 2018-07-27 14:05:33
    基本概念:  有状态就是有数据存储功能。...无状态对象(Stateless Bean),就是没有实例变量的对象 .不能保存数据,是不变类,是线程安全的。 代码更好理解: Java代码   public class Statef...
  • 最近在好好了解http,发现对介绍http的第一句话【http协议是无状态的,无连接的】就无法理解了:无状态的【状态】到底指的是什么?! 找了很多资料不仅没有发现有一针见血正面回答这个问题的,而且有些解释还充斥了...
  • JWT(无状态token)的应用

    千次阅读 2018-04-20 11:15:14
    什么是JWT?集成与应用问题JWT使用起来超级简单方便对不对,但它对于整体应用存在一个设计缺陷,那就是服务端无法主动失效token,什么意思呢?...如果要让服务端能够主动失效token,就要在服务端维持token状态,...
  • Kubernetes 无状态服务和有状态服务

    千次阅读 2020-01-25 15:50:27
    无状态服务 是指该服务运行的实例不会在... 相关的k8s资源有:ReplicaSet、ReplicationController、Deployment等,由于是无状态服务,所以这些控制器创建的pod序号都是随机值。并且在缩容的时候并不会明确缩容某...
  • 有状态和无状态服务是两种不同的服务架构,两者的不同之处在于对于服务状态的处理。服务状态是服务请求所需 的数据,它可以是一个变量或者一个数据结构。无状态服务不会记录服务状态,不同请求之间也是没有任何关系...
  • 什么是http无状态?以及如何解决?

    千次阅读 2016-06-04 13:19:02
    它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况” 要明白,这句话的含义是指在说明,http协议作为技术背景的web应用程序请求——应答模式是无状态的,这个事实基本不会发生改变,也不会因为...
  • 无状态进程或应用可以理解孤立的。关于它的既往事务,我们一无所知,没有任何参考。每项事务处理似乎都是从头开始。无状态应用只提供一项服务或功能, 无状态事务的典型示例是执行在线搜索,寻找您想要的答案。您...
  • http协议是无状态协议

    千次阅读 2019-09-08 19:24:13
    无连接指的是什么 (1)每一个访问都是无连接,服务器挨个处理... 无状态是指协议对于事务处理没有记忆功能。缺少状态意味着,假如后面的处理需要前面的信息,则前面的信息必须重传,这样可能导致每次连接传送的数...
  • 有状态和无状态的Servlet

    千次阅读 2015-01-19 16:35:38
    基本概念:  有状态就是有数据存储功能。有状态对象(Stateful Bean),就是有实例变量的对象,可以保存数据,是非线程安全的。在不同方法调用间不保留任何状态。...Spring中的有状态(Stateful)和无状态(State
  • 无状态应用

    千次阅读 2020-01-07 16:07:27
    概述 无状态应用: Stateless Application 是指并不会在会话中保存下次会话中去要的客户端数据。...什么是无状态应用 在无状态应用中,会话数据将会被存储在客户端或者透传给需要的这些数据的服务...
  • 有状态组件和无状态组件的区别

    千次阅读 2020-03-06 20:09:10
    有状态组件就是一个类,无状态组件是一个函数; 区别: 1.(是否拥有state)有状态组件可以使用状态:state,无状态组件不能使用state;只有继承component这个组件它才能拥有state进行一些数据的存储和管理,仍然...
  • react--无状态组件和有状态组件

    千次阅读 2019-06-23 07:54:51
    react--无状态组件和有状态组件
  • 这个是定义,从宏观上说的,实际上把无状态说成请求独立,无关联也对~下面具体的说说。 无状态在常见web应用项目中如何理解:http请求本身不具有任何上次请求会话的数据缓存。如果在不考虑cookie和session情况下,...
  • TCP有状态协议与HTTP无状态协议

    千次阅读 2021-02-03 16:35:33
    http协议是无状态协议,即下一次的http请求与上一次的http请求没有任何关系,没有任何上下文关系,即不记录上下文。但是TCP是有状态的协议,TCP下一次传输的报文段和上一次传输的报文段是有关系的,最终要按照报文段...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,637,204
精华内容 654,881
关键字:

为什么叫无状态