网络协议-http协议为什么是无状态的

什么是无状态,什么是无连接?

无状态协议:

  • 协议状态指的是下一次传输可以“记住”这次传输信息的能力。
  • 而http是不会为了下一次连接来维护这次连接所传输的信息,为的是保证服务器内存。
  • 如果客户获取一次网页后关闭了浏览器,然后再一次启动浏览器登录该网站,但是服务器并不知道用户关闭了一次浏览器。
  • 由于web服务器要面对很多浏览器的并发访问,为了提高web服务器对并发访问的处理能力,在设计HTTP协议时规定web服务器发送HTTP应答报文和文档时,不保存发出请求的Web浏览器进程的任何状态信息。这有可能出现一个浏览器在短短几秒之内两次访问同一个对象时,服务器进程不会因为已经给他发送过应答报文而不接受第二期服务请求。由于web服务器不保存发送请求的web浏览器进程的任何信息,因此HTTP协议属于无状态协议。

HTTP协议是无状态的和Connection:keep-alive的区别:

  • 无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面说,打开一个服务器上的网页和你之前打开这个浏览器上的网页之间没有任何联系。
  • HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。
  • 从HTTP/1.1起,默认都开启了Keep-alive,保持连接特性,简单说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
  • Keep-Alive不会永久保持连接,他有一个·保持时间,可以在不同的服务器软件(如Apache)中设定时间。
    Http是一个无状态协议,这意味着每一个请求都是独立的,Keep-Alive(服务器处理完客户的请求后,并收到客户端的应答后,不会立即断开)没能改变这个结果。
    随着时间的推移,人们发现静态的HTML着实无聊而且乏味,增加动态生成的内容才会令web应用程序变得更加有用。于是,HTML的语法在不断膨胀,其中最重要的是增加了Form表单;客户端也增加了诸如脚本处理、DOM处理等功能;对于服务器,则相应的出现了CGI(Common Gateway Interface)以处理包含表单提交在内的动态请求。
    在这种客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些交互式应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持HTTP状态的技术就应运而生了,一个是Cookie,而另一个则是Session。
    Cookie是客户端的存储空间,由浏览器来维持。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择,比如说重写URL和隐藏表单域。

简单的说就是cookie和session起到保存客户端状态的作用,但是它们并没有改变http协议本身这种无状态的性质,可以理解为在应用上做了状态保留。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值