`
464772913
  • 浏览: 25472 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

http协议无状态理解

 
阅读更多
 

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

自己的理解,在asp.net里:每次提交服务器的页面没有任何关系,每次记录在页面的信息下次提交是记不住的,(除了应用本身可能已经存储在全局对象中的所有信息外)在.net里实际就是ViewState,ViewState是asp.net中保存页面信息的基本单位,应用时就是保存在控件隐藏域等中的数据

协议的状态是指下一次传输可以“记住”这次传输信息的能力.
     http是不会为了下一次连接而维护这次连接所传输的信息的.

无状态是指,当浏览器发送请求给服务器的时候,服务器响应,但是同一个浏览器再发送请求给服务器的时候,他会响应,但是他不知道你就是刚才那个浏览器,简单地说,就是服务器不会去记得你,所以是无状态协议。
而DNS是有状态协议 。
 

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

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

HTTP是Hyper Text Transfer Protocol的缩写,顾名思义,这个协议支持着超文本的传输。那么什么是超文本呢?说白了就是使用HTML编写的页面。通常,我们使用客户端浏览器访问服务器的资源,最常见的URL也是以html为后缀的文件。因此,我们可以说超文本是网络上最主要的资源。

        既然HTTP协议的目的在于支持超文本的传输,更加广义一些就是支持资源的传输,那么在客户端浏览器向HTTP服务器发送请求,继而HTTP服务器将相应的资源发回给客户端这样一个过程中,无论对于客户端还是服务器,都没有必要记录这个过程,因为每一次请求和响应都是相对独立的,就好像你在自动售货机前投下硬币购买商品一样,谁都不会也不需要记住这样一个交易过程。一般而言,一个URL对应着唯一的超文本,而HTTP服务器也绝对公平公正,不管你是Michael,还是Jordon,它都会根据接收到的URL请求返回相同的超文本。正是因为这样的唯一性,使得记录用户的行为状态变得毫无意义,所以,HTTP协议被设计为无状态的连接协议符合它本身的需求。

        然而,随着时间的推移,人们发现静态的HTML着实无聊而乏味,增加动态生成的内容才会令Web应用程序变得更加有用。于是乎,HTML的语法在不断膨胀,其中最重要的是增加了表单(Form);客户端也增加了诸如脚本处理、DOM处理等功能;对于服务器,则相应的出现了CGI(Common Gateway Interface)以处理包含表单提交在内的动态请求。在这种客户端与服务器进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持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,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了。有关Session的内容还比较多,在以后的Post中,我还将继续讲述。

        综上所述,HTTP本身是一个无状态的连接协议,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,而这些不同的技术就是Cookie和Session了

 

 

分享到:
评论

相关推荐

    03HTTP协议无状态1

    "无状态"和"无连接"是HTTP协议的核心特征,但这两点经常被误解,所以我们需要深入理解它们的含义。 "无状态"意味着HTTP协议自身并不保留任何关于客户端的先前请求或响应的信息。每次客户端向服务器发送请求时,...

    HTTP协议的分析和理解

    HTTP协议的无状态特性使得它需要通过一些机制来维护状态,比如Cookie和Session。此外,HTTP协议的无连接特性可以通过持续连接(keep-alive)进行优化,允许在一个TCP连接上发送和接收多个请求/响应。 随着互联网的...

    认清http协议本质

    4. 索引与无状态性:HTTP协议本身是无状态的,意味着每次请求都是独立的,服务器不会记住之前请求的信息。为了实现会话跟踪,通常使用Cookie或Session技术。 5. 报文结构:HTTP报文由两部分组成——头部和主体。...

    网络协议TCP/IP实验七 HTTP 协议分析实验

    2. **理解HTTP协议的工作机制**:通过对捕获的报文进行分析,进一步理解HTTP协议如何在客户端与服务器之间进行通信,包括连接的建立、请求与响应的过程等。 #### 实验内容及步骤详解 1. **启动Ethereal并设置过滤...

    HTTP协议状态码

    状态码是HTTP协议中不可或缺的一部分,它向客户端传达了服务器对请求的处理结果。了解HTTP状态码对于Web开发者来说至关重要,因为它可以帮助快速定位和解决网页访问过程中出现的问题。 HTTP状态码由三位数字组成,...

    理解HTTP协议共2页.pdf.zip

    本资料“理解HTTP协议共2页.pdf”虽然只包含两页内容,但应当概述了HTTP协议的基本概念和核心要点。在本文中,我们将深入探讨HTTP协议的关键知识点,帮助你更全面地理解这一协议。 首先,HTTP是一种无状态的协议,...

    HTTP协议详解_HTTP协议_

    HTTP(超文本传输协议,Hypertext Transfer Protocol)是互联网上应用最为广泛的一种网络协议,它定义了客户端(通常是浏览器)和...理解并熟练运用HTTP协议对于开发Web应用、调试网络问题以及优化网络性能至关重要。

    http协议中文版(http协议中文版)

    1. **无状态**:HTTP协议自身不维护连接状态,每次请求和响应都是独立的,服务器不会记住之前请求的信息。为了实现状态保持,开发者通常会使用Cookie或Session。 2. **简单快速**:设计时主要考虑快速传输,对数据...

    http协议理解

    在本文中,我们将深入理解HTTP协议的基本概念,包括请求方法(GET和POST)以及HTTP响应的相关内容。 2.1 GET 协议 GET是最常见的HTTP方法,用于请求服务器上的资源。当用户在浏览器中输入一个URL(如`...

    张孝祥_HTTP协议详解

    HTTP协议的特点是非连接性和无状态性,即每次请求和响应之间没有直接的关联,服务器不会保留关于用户会话的信息,除非通过Cookie等机制实现。 二、HTTP请求与响应 1. 请求:HTTP请求由请求行、请求头、空行和请求体...

    HTTP协议.zip_HTTP_HTTP协议

    HTTP协议是互联网通信的核心,理解其工作原理对于开发Web应用至关重要。随着技术的演进,HTTP不断优化以适应更高的性能需求和更复杂的安全场景。无论是开发人员还是运维人员,深入掌握HTTP协议都将对日常工作中解决...

    HTTP协议详解及RFC2616(HTTP)中文版

    HTTP协议详解和RFC2616中文版的文档是理解HTTP协议的关键资源。通过深入学习,开发者可以更好地掌握Web通信的原理,从而编写出更高效、更可靠的网络应用。无论是开发Web服务器、前端应用还是后端接口,对HTTP协议的...

    http协议分析工具

    HTTP协议分析工具能够帮助我们深入理解HTTP通信过程,包括请求方法、状态码、头部信息、请求体和响应体等关键元素。 首先,让我们看看JavaScript。JavaScript是一种轻量级的解释性编程语言,常用于网页和网络应用...

    HTTP协议观察工具

    HTTP协议观察工具应能解析和格式化JSON数据,便于查看和理解结构化信息。 8. 协议监控:持续追踪HTTP活动,帮助开发者监控应用在长时间运行时的行为和性能。 myhttpwatch_11.0.16.0.exe文件可能是一个名为...

    CWMP协议规范资源理解

    CWMP协议基于HTTP和SOAP(Simple Object Access Protocol)协议,确保了跨平台的兼容性。其工作流程通常包括以下几个步骤: 1. **初始化**:CPE(客户终端设备)启动时,会周期性地向管理服务器发送一个“Inform”...

    HTTP协议中文版

    HTTP协议是无状态的,它不会记住之前的交互,这使得服务器能够处理多个请求,同时避免保存每个客户端的状态。 2. HTTP协议的版本: HTTP/1.1是当前使用的HTTP协议的最新版本,相比早期版本,它有更高的效率和更佳的...

    HTTP协议学习心得体会[参考].pdf

    1. 无状态:HTTP 协议是无状态的,服务器不跟踪每个客户机,也不记录过去的请求。 2. 持续连接:HTTP1.1 支持持久连接,在一个 TCP 连接上可以传送多个 HTTP 请求和响应,减少了建立和关闭连接的消耗和延迟。 3. 多...

    HTTP协议详解电子书

    在Web开发和网络编程中,对HTTP协议的理解和运用至关重要。 HTTP协议采用了请求/响应模型。在这个模型中,客户端(通常是浏览器)向服务器发送一个HTTP请求,请求中包含了希望获取的信息或者执行的操作。请求由一...

Global site tag (gtag.js) - Google Analytics