HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态

无连接

无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

早期这么做的原因是 HTTP 协议产生于互联网,因此服务器需要处理同时面向全世界数十万、上百万客户端的网页访问,但每个客户端(即浏览器)与服务器之间交换数据的间歇性较大(即传输具有突发性、瞬时性),并且网页浏览的联想性、发散性导致两次传送的数据关联性很低,大部分通道实际上会很空闲、无端占用资源。因此 HTTP 的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端

随着时间的推移,网页变得越来越复杂,里面可能嵌入了很多图片,这时候每次访问图片都需要建立一次 TCP 连接就显得很低效。后来,Keep-Alive 被提出用来解决这效率低的问题。

Keep-Alive 功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了建立或者重新建立连接。市场上的大部分 Web 服务器,包括 iPlanet、IIS 和 Apache,都支持 HTTP Keep-Alive。对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,这里存在另外一个问题:虽然为客户保留打开的连接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep-Alive 功能对资源利用的影响尤其突出。

这样一来,客户端和服务器之间的 HTTP 连接就会被保持,不会断开(超过 Keep-Alive 规定的时间,意外断电等情况除外),当客户端发送另外一个请求时,就使用这条已经建立的连接。

无状态

无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。

HTTP 是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive 没能改变这个结果。

缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

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

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

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

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

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

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

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

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

转自:https://blog.csdn.net/tennysonsky/article/details/44562435

HTTP 协议是无状态协议,怎么理解相关推荐

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

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp24 HTTP协议是无状态协议,怎么理解?  2010-02-23 09:4 ...

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

    2019独角兽企业重金招聘Python工程师标准>>> Http是一个无状态协议,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对 ...

  3. cookie和session之会话机制:   http 协议  ---》 无状态协议

    设置cookie:             通过response对象:      response = make_response()      response.set_cookie(key,val ...

  4. 如何理解HTTP协议是无状态的

    HTTP协议是无状态的,指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态.

  5. Http实战之无状态协议、keep-alive分析

    Http1.1特性 无状态的协议 HTTP 是一种不保存状态,即无状态(stateless)协议. HTTP 协议自身不对请求和响应之间的通信状态进行保存.也就是说在 HTTP 这个级别,协议对于发送 ...

  6. http协议是无状态的,无连接的

    引子: 最近在好好了解http,发现对介绍http的第一句话[http协议是无状态的,无连接的]就无法理解了:无状态的[状态]到底指的是什么?! 找了很多资料不仅没有发现有一针见血正面回答这个问题的, ...

  7. HTTP协议是无状态的/无连接的到底指的是什么?

    直观的说,"每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况" 要明白,这句话的 ...

  8. 在web项目中实现会话跟踪(http协议是无状态)

    HTTP是"无状态"协议:客户程序每次读取 Web 页面,都打开到 Web 服务器的单独的连接,并且,服务器也不自动维护客户的上下文信息.即使那些支持持续性 HTTP 连接的服务器 ...

  9. http无状态协议如何保存用户状态

    http无状态协议如何保存用户状态 http无状态协议如何保存用户状态? http无状态协议如何保存用户状态? HTTP 是一种不保存状态,即无状态(stateless)协议.HTTP 协议自身不对请 ...

最新文章

  1. SQL高级查询(层次化查询,递归)
  2. 数据挖掘之人工神经网络BP算法
  3. 【实施工程师】MySQL导入大sql 文件大小限制问题的解决
  4. 爬虫——正则表达式re模块
  5. spark应用程序_Sparklens:Spark应用程序优化工具
  6. python esp8266模块_ESP8266使用笔记之常用固件
  7. 中职计算机英语课件ppt,语文版中职英语(基础模块 上册)Unit 7《Computers》ppt课件1.ppt...
  8. 在企业级开发中使用Try...Catch...会影响效率吗?
  9. 2021年计算机网络常见面试题
  10. Java中this的用法总结
  11. python调用大漠插件寻路_简单大漠插件调用.py
  12. 超赞的8款开源聊天软件
  13. 电脑Tab键有什么用
  14. SQL查询本周过生日的同学,和下周过过生日的同学
  15. Autumn2.0.1_WP扁平化博客自媒体文章资讯类网站模板
  16. Mac上如何下载brew
  17. 《 初学 》 html5 制作简单时钟
  18. Python+selenium之下载文件
  19. 四级单词pdf_2017年6月大学英语四级真题及答案解析(完整三套可打印)
  20. 2021观澜二中高考成绩查询,最新深中高考地段生源数据揭秘:站上时代风口,踊追新中心二梯队学区房!...

热门文章

  1. php聊天室技术,PHP聊天室技术
  2. Qt实现QTextEdit背景透明
  3. bitcount java_Java.math.BigInteger.bitCount()方法实例
  4. 【PAT甲级最新题解】PAT甲级2020.7月春季考试满分题解(附代码)
  5. 【CodeForces - 357C 】Knight Tournament(并查集 或 STLset)
  6. 呆在实验室到深夜的小随笔
  7. Apollo进阶课程㊲丨Apollo自动驾驶架构介绍
  8. 动手学PaddlePaddle(5):迁移学习
  9. LeetCode刷题实战(13):Roman to Integer
  10. 虚拟机安装Linux(vmware + ubuntu)