HTTP协议是无状态协议,怎么理解?
Http是一个无状态协议,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的全部信息外,该环境不保存与会话有关的不论什么信息。
自己的理解,在asp.net里:每次提交server的页面没有不论什么关系,每次记录在页面的信息下次提交是记不住的,(除了应用本身可能已经存储在全局对象中的全部信息外)在.net里实际就是ViewState,ViewState是asp.net中保存页面信息的基本单位,应用时就是保存在控件隐藏域等中的数据
协议的状态是指下一次传输能够“记住”这次传输信息的能力.
http是不会为了下一次连接而维护这次连接所传输的信息的.
无状态是指,当浏览器发送请求给server的时候,server响应,可是同一个浏览器再发送请求给server的时候,他会响应,可是他不知道你就是刚才那个浏览器,简单地说,就是server不会去记得你,所以是无状态协议。
而DNS是有状态协议 。
HTTP是一个属于应用层的面向对象的协议,HTTP协议一共同拥有五大特点,1、支持客户/server模式;2、简单高速;3、灵活;4、无连接;5、无状态;“无状态”是HTTP协议的主要特点之中的一个,下面为“无状态”的解释。 无状态:是指
协议对于事务处理没有记忆能力。缺少状态意味着假设兴许处理须要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。还有一方面,在server不须要先前信息时它的应答就较快。
HTTP是Hyper Text Transfer Protocol的缩写,顾名思义,这个协议支持着超文本的传输。那么什么是超文本呢?说白了就是使用HTML编写的页面。通常,我们使用client浏览器訪问server的资源,最常见的URL也是以html为后缀的文件。因此,我们能够说超文本是网络上最基本的资源。
既然HTTP协议的目的在于支持超文本的传输,更加广义一些就是支持资源的传输,那么在client浏览器向HTTPserver发送请求,继而HTTPserver将相应的资源发回给client这样一个过程中,不管对于client还是server,都没有必要记录这个过程,由于每一次请求和响应都是相对独立的,就好像你在自己主动售货机前投下硬币购买商品一样,谁都不会也不须要记住这样一个交易过程。一般而言,一个URL相应着唯一的超文本,而HTTPserver也绝对公平公正,不管你是Michael,还是Jordon,它都会依据接收到的URL请求返回同样的超文本。正是由于这种唯一性,使得记录用户的行为状态变得毫无意义,所以,HTTP协议被设计为无状态的连接协议符合它本身的需求。
然而,随着时间的推移,人们发现静态的HTML着实无聊而乏味,添加动态生成的内容才会令Web应用程序变得更加实用。于是乎,HTML的语法在不断膨胀,当中最重要的是添加了表单(Form);client也添加了诸如脚本处理、DOM处理等功能;对于server,则对应的出现了CGI(Common Gateway Interface)以处理包括表单提交在内的动态请求。在这样的client与server进行动态交互的Web应用程序出现之后,HTTP无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是须要承前启后的,简单的购物车程序也要知道用户究竟在之前选择了什么商品。于是,两种用于保持HTTP连接状态的技术就应运而生了,一个是Cookie,而还有一个则是Session。
Cookie是通过client保持状态的解决方式。从定义上来说,Cookie就是由server发给client的特殊信息,而这些信息以文本文件的方式存放在client,然后client每次向server发送请求的时候都会带上这些特殊的信息。让我们说得更详细一些:当用户使用浏览器訪问一个支持Cookie的站点的时候,用户会提供包含username在内的个人信息而且提交至server;接着,server在向client回传对应的超文本的同一时候也会发回这些个人信息,当然这些信息并非存放在HTTP响应体(Response
Body)中的,而是存放于HTTP响应头(Response Header);当client浏览器接收到来自server的响应之后,浏览器会将这些信息存放在一个统一的位置,对于Windows操作系统而言,我们能够从:[系统盘]:\Documents and Settings\[username]\Cookies文件夹中找到存储的Cookie;自此,client再向server发送请求的时候,都会把对应的Cookie再次发回至server。而这次,Cookie信息则存放在HTTP请求头(Request Header)了。
有了Cookie这种技术实现,server在接收到来自client浏览器的请求之后,就行通过分析存放于请求头的Cookie得到client特有的信息,从而动态生成与该client相相应的内容。通常,我们可以从非常多站点的登录界面中看到“请记住我”这种选项,假设你勾选了它之后再登录,那么在下一次訪问该站点的时候就不须要进行反复而繁琐的登录动作了,而这个功能就是通过Cookie实现的。
与Cookie相对的一个解决方式是Session,它是通过server来保持状态的。因为Session这个词汇包括的语义非常多,因此须要在这里明白一下Session的含义。首先,我们通常都会把Session翻译成会话,因此我们能够把client浏览器与server之间一系列交互的动作称为一个Session。从这个语义出发,我们会提到Session持续的时间,会提到在Session过程中进行了什么操作等等;其次,Session指的是server端为client所开辟的存储空间,在当中保存的信息就是用于保持状态。从这个语义出发,我们则会提到往Session中存放什么内容,怎样依据键值从Session中获取匹配的内容等。
要使用Session,第一步当然是创建Session了。那么Session在何时创建呢?当然还是在server端程序执行的过程中创建的,不同语言实现的应用程序有不同创建Session的方法,而在Java中是通过调用HttpServletRequest的getSession方法(使用true作为參数)创建的。在创建了Session的同一时候,server会为该Session生成唯一的Session id,而这个Session id在随后的请求中会被用来又一次获得已经创建的Session;在Session被创建之后,就能够调用Session相关的方法往Session中添加内容了,而这些内容仅仅会保存在server中,发到client的仅仅有Session
id;当client再次发送请求的时候,会将这个Session id带上,server接受到请求之后就会根据Session id找到对应的Session,从而再次使用之。正式这样一个过程,用户的状态也就得以保持了。有关Session的内容还比較多,在以后的Post中,我还将继续讲述。
综上所述,HTTP本身是一个无状态的连接协议,为了支持client与server之间的交互,我们就须要通过不同的技术为交互存储状态,而这些不同的技术就是Cookie和Session了
HTTP协议是无状态协议,怎么理解?的更多相关文章
- HTTP协议是无状态协议,怎么理解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp24 HTTP协议是无状态协议,怎么理解? 2010-02-23 09:4 ...
- http协议是无状态协议,它的无状态指的是什么,如何解决这种情况
http是无状态的协议,也是不安全的协议, 它的无状态是指对于事务处理没有记忆能力,缺少状态意味着后续的操作需要前面的信息. 解决办法:1,通过cookie解决,2,通过session会话保存.
- HTTP无状态协议理解
TTP协议是无状态协议. 无状态是指协议对于事务处理没有记忆能力.缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大.另一方面,在服务器不需要先前信息时它的应 ...
- 为什么说http协议是无状态的?
首先了解基本概念:什么是无状态,什么是无连接 无状态协议: 协议的状态是指下一次传输可以“记住”这次传输信息的能力. http是不会为了下一次连接而维护这次连接所传输的信息,为了保证服务器内存. 比如 ...
- HTTP无状态协议
http://baike.baidu.com/view/4551466.htm HTTP协议是无状态协议. 无状态是指协议对于事务处理没有记忆能力.缺少状态意味着如果后续处理需要前面的信息,则它必须重 ...
- HTTP协议是无状态的
含义: 无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态.从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系 实际中的使用情况: 在web应用中,我 ...
- 《图解HTTP》读书笔记(三:无状态协议/cookie管理状态)
HTTP是一种不保存状态,即无状态(stateless)协议.HTTP协议自身不对请求和响应之间的通信状态进行保存. ——HTTP/1.1虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了Co ...
- http无状态协议,cookie和session详解(一)
1.HTTP无状态协议 首先看百度百科给出的定义: HTTP无状态协议,是指协议对于事务处理没有记忆能力.缺少状态意味着如果后续处理需要前面的信息,则它必须重传, 这样导致可能每次连接传送的数据量增大 ...
- Flask基础(10)-->http的无状态协议解决办法一(客户端cookie)
http的无状态协议 http是一种无状态协议,浏览器请求服务器时无状态的 什么是无状态? 无状态:指的是一次用户请求时,浏览器.服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求. 无状态 ...
随机推荐
- R与数据分析旧笔记(八)多重共线性
多重共线性(线性代数叫线性相关) 多重共线性(线性代数叫线性相关) 1.什么是多重共线性 2.多重共线性对回归模型的影响 3.利用计算特征根发现多重共线性 4.Kappa()函数 例题1 考虑一个有六 ...
- 定义一个runtime的Annotation
import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(value ...
- 【原创】JPEG图像密写研究(二) 哈夫曼树的建立
[原创]记录自己研究的过程,仅供参考,欢迎讨论... 在根据JPEG图像文件结构读取完文件后,提取出其中DHT段,利用其中内容建立哈夫曼树,便于之后译码工作.这里需要注意的是文件中的哈夫曼表数量不固定 ...
- 教你看懂C++类库函数定义之二---STDMETHOD介绍
一切从一个C++ 类库头文件开始,现在在做一个C++的项目,期间用到一个开源的界面库DUILib(类似MFC),这个东西还不错能很容易的写出漂亮的界面,比如QQ的界面,可以去下载下来研究研究,地址:h ...
- android -上传文件到服务器
android上传文件到服务器 重点:最好是设置好content-type这些参数的配置! package com.spring.sky.image.upload.network; ...
- 关于结构体和C++类的内存地址问题
关于结构体和C++类的内存地址问题 今天终于有时间写点东西了~ 太爽了 *_* 很多人都知道C++类是由结构体发展得来的,所以他们的成员变量(C语言的结构体只有成员变量)的内存分配机制是一样 ...
- Struts 和Spring的核心控制器
Struts 核心控制器是FilterDispatch Spring核心控制器是DispatchServlet
- delphi ICS控件示例解读
{* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Author: Fran鏾is PIETTE ...
- Java图形化界面设计——布局管理器之BorderLayout(边界布局)
- 实习生的Django[1]
尽管学期尚未结束,暑假尚未到来,可是大三的同学非常多已经和我一样開始实习或者实习一段时间了.我仅仅面试了一间数据挖掘的公司的研发部,还算顺利通过. 来这里实习后,由于网络原因,昨天没有刷题也没有写BL ...