`
月迷津渡
  • 浏览: 101990 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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了。

原文出处:http://perhaps.cnblogs.com/archive/2006/06/28/438187.html
分享到:
评论

相关推荐

    ASP.NET状态管理

    ### ASP.NET状态管理详解...无论是通过视图状态、控件状态还是应用状态等机制,都旨在解决HTTP无状态性的挑战,同时保持良好的性能和安全性。通过深入理解这些概念和技术,开发者可以更好地设计和实现高性能的Web应用。

    无状态聊天(ajax)

    无状态聊天(Ajax)是一种基于Web的技术,它允许在不刷新整个页面的情况下更新部分网页内容。这个技术的核心是Ajax(Asynchronous JavaScript and XML),虽然名字里有XML,但实际应用中并不局限于XML,而是可以使用...

    Session详解

    总之,Session机制是现代Web应用中不可或缺的部分,它克服了HTTP无状态性的限制,实现了用户状态的持续追踪。通过合理的实现和管理,Session能够显著提升用户体验,同时保障应用的安全性和性能。然而,这也要求...

    1.6W字!梳理50道经典计算机网络面试题(收藏版).pdf

    4. **HTTP无状态性**:HTTP协议本身不保存任何会话信息,每次请求都是独立的。为了实现状态保持,可以使用Cookie或者Session技术。 5. **HTTP版本差异**: - HTTP 1.0:每次请求都需要新建TCP连接,可以通过...

    关于session的详细解释.pdf

    Session机制是现代Web应用中不可或缺的一部分,它克服了HTTP无状态性的限制,实现了用户状态的持久化和个性化体验的提供。然而,合理设计和实施Session管理策略对于确保性能、安全性和用户体验至关重要。通过深入...

    Session cookies

    为了解决HTTP无状态性带来的问题,引入了Session的概念。Session是在服务器端创建的一种机制,用于记录特定用户的会话信息。每当用户与服务器建立连接时,都会创建一个新的Session,并为该Session分配一个唯一的...

    HTTP 状态码 大全

    #### 一、1xx 信息性状态码 1xx状态码表示接收到请求并且正在处理。这些状态码主要用于通知客户端后续的动作,但客户端无需为此采取行动。这类状态码并不常见。 - **100 继续**:指示客户端可以继续执行请求,或...

    ASP.NET购物车模块

    在实现这些功能时,会用到HTTP无状态性的处理方法。由于HTTP协议本身不保存用户状态,因此我们需要借助其他机制,如Cookie或服务器端的会话(Session)来跟踪用户的购物车信息。ASP.NET中的Session对象非常适合用于...

    http状态码详解.docx

    1. **1XX** - 信息性状态码:这类状态码用于传递请求处理过程中的临时信息,例如确认接收到了请求或正在转发请求。由于这类状态码主要用于协议级别的交互,并不常出现在日常应用中,因此对开发者而言相对陌生。 -...

    cookie与session、sessionid

    Cookie和Session都是解决HTTP无状态性的关键技术。Cookie适用于存储少量非敏感信息,而Session更适合于存储敏感信息或大量数据。在实际应用中,开发者需要根据具体情况选择合适的技术。通过合理地利用这两种技术,...

    it商务网

    状态管理机制确保了在HTTP无状态性的环境下,用户信息和应用程序状态可以得到维护。至于安全性,ASP.Net提供了身份验证、授权和安全配置等功能,确保了应用的数据和用户访问安全。 在实际应用中,ASP.Net还支持MVC...

    [人才房产]神州人才招聘网 Build 1228_rencai001(ASP.NET源码).rar

    2. **视图状态**:ASP.NET的视图状态机制用于在页面回发时保持控件的状态,避免了因HTTP无状态性导致的数据丢失。在招聘网站中,这有助于保留用户在填写简历或搜索条件时输入的信息。 3. **控件工具箱**:ASP.NET...

    [毕业设计]asp.net通讯录管理系统课程设计.zip

    在Web应用程序中,由于HTTP无状态性,状态管理是一个关键问题。ASP.NET提供了多种状态管理机制,如视图状态、隐藏字段、cookie和Session。在通讯录系统中,可能需要使用这些机制来保存用户的操作状态,如当前选择的...

    jsp刷新不变计数器

    2. **HTTP无状态性**:HTTP协议本身是无状态的,这意味着服务器不会记住客户端的任何信息。因此,我们需要一个机制来跟踪每个用户的访问,例如使用cookie或session。 3. **会话管理**:在JSP中,可以使用`...

    酒店管理系统 ASP.NET源码带数据库及结构图

    4. **状态管理**:处理HTTP无状态性,如Session、Cookie、ViewState,用于保持用户会话状态。 5. **异常处理**:通过try-catch-finally结构捕获并处理运行时错误,保证系统的稳定运行。 6. **缓存机制**:如Output ...

    深入理解和改进 jsp servlet会话管理机制

    - **HTTP无状态性**:HTTP协议不保存任何客户端信息,这意味着服务器无法通过HTTP请求来识别同一客户端的不同请求。 - **会话管理**:为了解决HTTP无状态的问题,引入了会话管理的概念。其主要目标是在多次请求之间...

    asp.net组件设计

    7. **状态管理**:ASP.NET控件需要处理HTTP无状态性,通过视图状态(ViewState)、隐藏字段或cookie来保存和恢复控件的状态。 8. **调试与测试**:创建自定义控件后,必须对其进行充分的测试,确保它们在不同环境下...

    18个ASP.NET WebForm项目源码

    7. **状态管理**:在Web环境中,由于HTTP无状态性,WebForm提供了一些状态管理技术,如Session、Cookie和Application,用于在多个请求间保持用户或应用的状态。 8. **使用教程**:每个项目可能附带了使用教程,帮助...

    ASP.NET电子商务网站论文

    4. **状态管理**:ASP.NET提供了多种状态管理机制,如视图状态、隐藏字段、cookie等,用于在HTTP无状态性中保持用户数据。 5. **数据绑定**:ASP.NET的数据绑定技术使得数据展示和操作变得更加简单,可以轻松地将...

    ASP.NET 课程设计

    7. **状态管理**:在ASP.NET中,学生需要了解如何处理HTTP无状态性的挑战,包括使用Session、ViewData、TempData、Cookie等方式。 8. **AJAX与jQuery**:为了实现页面的异步更新,课程设计可能包含使用jQuery进行...

Global site tag (gtag.js) - Google Analytics