首先了解基本概念:什么是无状态,什么是无连接

无状态协议:

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

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协议本身这种无状态的性质,可以理解为在应用上做了状态保留。

最新文章

  1. 织梦Dedecms使用Nginx的安全设置
  2. Equals和ReferenceEquals
  3. vim 插件管理
  4. [转]MySQL主从复制入门
  5. Intellij idea安装设置
  6. 求编译器中数的最值(c++)
  7. Oracle to_char格式化函数
  8. java执行命令行
  9. hdu_2159_FATE(完全背包)
  10. Samba文件共享服务
  11. DNSmasq服务搭建
  12. qt中的udp编程
  13. nginx系列10:通过upstream模块选择上游服务器和负载均衡策略round-robin
  14. 解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法
  15. Linux 学习 (五) 压缩与解压缩命令
  16. iis8.0 https配置教程
  17. BZOJ4391 High Card Low Card [Usaco2015 dec](贪心+线段树/set库
  18. openssl AES加密
  19. HDU 4764 Stone (2013长春网络赛,水博弈)
  20. appium自动化测试实战

热门文章

  1. bfs学习
  2. Java入门篇(三)——Java流程控制
  3. [国嵌攻略][051][NandFlash原理解析]
  4. $.extend()方法和(function($){...})(jQuery)详解
  5. api接口token验证
  6. Vue下路由History mode导致页面无法渲染的原因
  7. 浅谈 C/S 和 B/S 架构
  8. vue学习笔记(四)——Vue实例以及生命周期
  9. “Project 'MyFunProject' is not a J2SE 5.0 compliant project.”
  10. 如何使用mysql命令行