HTTP解析–无连接、无状态

我们都知道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的Keep-Alive解析

HTTP Keep-Alive 很大程序上被误解了,下面介绍一下它在HTTP/1.0和HTTP/1.1版本下是如何工作的,以及其在JAVA中的运行原理。
HTTP是一个 请求<->响应模式的典型范例,即客户端向服务器发送一个请求信息,服务器来响应这个信息。在老的HTTP版本中,每个请求都将被创建一个新的 客户端->服务器的连接,在这个连接上发送请求,然后接收请求。这样的模式有一个很大的优点就是,它很简单,很容易理解和编程实现;它也有一个很大的缺点就是,它效率很低,因此Keep-Alive被提出用来解决效率低的问题。HTTP/1.0
在HTTP/1.0版本中,并没有官方的标准来规定Keep-Alive如何工作,因此实际上它是被附加到HTTP/1.0协议上,如果客户端浏览器支持Keep-Alive,那么就在HTTP请求头中添加一个字段 Connection: Keep-Alive,当服务器收到附带有Connection: Keep-Alive的请求时,它也会在响应头中添加一个同样的字段来使用Keep-Alive。这样一来,客户端和服务器之间的HTTP连接就会被保持,不会断开(超过Keep-Alive规定的时间,意外断电等情况除外),当客户端发送另外一个请求时,就使用这条已经建立的连接HTTP/1.1
在HTTP/1.1版本中,官方规定的Keep-Alive使用标准和在HTTP/1.0版本中有些不同,默认情况下所在HTTP1.1中所有连接都被保持,除非在请求头或响应头中指明要关闭:Connection: Close  ,这也就是为什么Connection: Keep-Alive字段再没有意义的原因。另外,还添加了一个新的字段Keep-Alive:,因为这个字段并没有详细描述用来做什么,可忽略它

无状态

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

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

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

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

如何解决这个问题呢?这就引入了Cookie和Session

  Cookie是通过客户端保持状态的解决方案。从定义上来说,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息。让我们说得更具体一些:当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response Body)中的,而是存放于HTTP响应头(Response Header);当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置,对于Windows操作系统而言,我们可以从:[系统盘]:\Documents and Settings\[用户名]\Cookies目录中找到存储的Cookie;自此,客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器。而这次,Cookie信息则存放在HTTP请求头(Request Header)了。有了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解析--无连接、无状态相关推荐

  1. HTTP中的无状态、无连接是什么意思呢?超详细

    以前http.https.IP.TCP.UDP.TCP/IP都是靠背的,特别是http中的各种无连接无状态都是死记硬背的,过阵子又忘了,直到看到这篇文章,直接拍手叫好,转载给大家一起看 原为地址:ht ...

  2. http的“无连接”指的是_http协议无状态中的 quot;状态quot; 到底指的是什么?...

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

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

    转载自:点击打开链接http://blog.csdn.net/tennysonsky/article/details/44562435 HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有 ...

  4. http的“无连接”指的是_头条一面:HTTP协议无状态中的 quot;状态quot; 到底指的是什么?...

    # 引子 最近,面试头条,一面面试官为了我一个关于HTTP的问题. 题目:http协议是无状态的,无连接的,无状态的[状态]到底指的是什么? 当时就被问懵逼了,幸好其它问题答得还不错,勉强过关. 面完 ...

  5. 无状态,无连接的理解

    为什么说http协议是无状态协议 对服务器程序来说,究竟是有状态服务,还是无状态服务,其判断依旧是指两个来自相同发起者的请求在服务器端是否具备上下文关系.如果是状态化请求,那么服务器端一般都要保存请求 ...

  6. HTTP协议的 “无连接,无状态”

    HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:1.支持客户/服务器模式:2.简单快速:3.灵活:4.无连接:5.无状态. 无连接 无连接的含义是限制每次连接只处理一个请求. ...

  7. HTTP协议之无连接与无状态

    前言 HTTP协议一共有五大特点,1.支持客户/服务器模式:2.简单快速:3.灵活:4.无连接:5.无状态.其中无状态是其中主要特点之一.因此,常说HTTP是一个无状态协议.所谓的无状态是指协议对于事 ...

  8. http的无连接与无状态

    HHTP协议一共有五大特点:1 支持客户/服务器模式 :2 简单快速 : 3 灵活 : 4 无连接 : 5 无状态 . 其中无状态是其最重要的特点之一,因此常说HTTP是一种无状态协议. . 那么在这 ...

  9. http的无连接和无状态

    无连接 客户端每一次访问都是无连接,服务器挨个处理访问队列,每处理完一次请求,就关闭连接,接着处理新请求. 无状态 对于事务处理没有记忆能力,对同一url的请求没有上下文关系,每次请求都是独立的,服务 ...

最新文章

  1. 网络营销外包——网络营销外包专员浅析提升用户体验从哪入手?
  2. SAP Spartacus 自定义 theme 实现思路
  3. java爬虫自动识别验证码_简单Java爬虫(一)爬取手机号码
  4. linux查看进程调用接口,查看某个程序都调用哪些api函数
  5. 如何进行产品战略规划
  6. 带你换个角度理解图卷积网络
  7. H5 71-网易注册界面4
  8. Git使用出现git@github.com: Permission denied (publickey)
  9. android开发框架_2019 年五大跨平台移动应用开发工具
  10. 电视剧《勇敢的心》观后感
  11. 四级英语词汇加词组(超全)
  12. DL之GRU:基于2022年6月最新上证指数数据集结合Pytorch框架利用GRU算法预测最新股票上证指数实现回归预测
  13. matlab2020a安装完多大_Matlab2020a
  14. word 标尺排版使用技巧
  15. C 语言 某人在国外留学,不熟悉当地的天气预报中的华氏温度值,请编程按每隔10°输出0°到300°之间的华氏温度的对照表,方便他对照查找
  16. 龙ol服务器维护补偿boss,BOSS也疯狂《龙OL》野外BOSS大搜罗
  17. 三个并联电阻计算c语言,3个电阻并联怎么计算
  18. 入大数据行业,主要应该要学习什么?
  19. 易语言 股票CCI指标 源码
  20. React 脚手架安装

热门文章

  1. 大爱无疆,德泰先行——刘煊苗与他的德泰堂
  2. Win10电脑用户密码破解
  3. python下载-Python中文版
  4. Linux 入门——基础使用及常见命令
  5. 游戏场景和关卡怎么设计
  6. 5th-Generation Mobile Communication Technology(一)
  7. 数据采集-各工业设备-ModbusRtu说明
  8. 王道考研2019版计算机网络第二章--物理层
  9. 计算机统考木桶效应ppt,木桶效应 课件..ppt
  10. 为什么你总是后知后觉?