http 协议和 web 应用有状态和无状态

http 协议和 web 应用有状态和无状态,第1张

在无状态自动配置(Stateless Autoconfiguration)过程中,主机首先通过将它的网卡MAC地址附加在链接本地地址前缀1111111010之后,产生一个链路本地单点传送地址。接着主机向该地址发出一个被称为邻居发现(neighbor discovery)的请求,以验证地址的唯一性。如果请求没有得到响应,则表明主机自我设置的链路本地单点传送地址是唯一的。否则,主机将使用一个随机产生的接口ID组成一个新的链路本地单点传送地址。然后,以该地址为源地址,主机向本地链路中所有路由器多点传送一个被称为路由器请求( router solicitation)的配置信息。路由器以一个包含一个可聚集全球单点传送地址前缀和其它相关配置信息的路由器公告响应该请求。主机用它从路由器得到的全球地址前缀加上自己的接口ID,自动配置全球地址,然后就可以与Internet中的其它主机通信了。使用无状态自动配置,无需手动干预就能够改变网络中所有主机的IP地址。
更简单的理解是无状态就是自动分配,有状态是要用网管分给你的地址,不完全正解。但基本可以简单这样理解。

>

>

>

>

>

1、OPTIONS

返回服务器针对特定资源所支持的>

2、HEAD

向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。

3、GET

向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的 *** 作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url

4、POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form

5、PUT

向指定资源位置上传其最新内容

6、DELETE

请求服务器删除Request-URL所标识的资源

7、TRACE

回显服务器收到的请求,主要用于测试或诊断

8、CONNECT

>

注意:

1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。

2)>

>

>

>

客户端连接到Web服务器->发送>

1、客户端连接到Web服务器

一个>

2、发送>

通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

3、服务器接受请求并返回>

Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

4、释放连接TCP连接

若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

5、客户端浏览器解析HTML内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

>

客户端发送一个>

请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本

Get请求例子,使用Charles抓取的request:

GET /562f25980001b1b106000338jpg >

第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的>

GET说明请求类型为GET,[/562f25980001b1b106000338jpg]为要访问的资源,该行的最后一部分说明使用的是>

第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息

从第二行起为请求头部,HOST将指出请求的目的地User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础该信息由你的浏览器来定义,并且在每个请求中自动发送等等

第三部分:空行,请求头部后面的空行是必须的

即使第四部分的请求数据为空,也必须有空行。

第四部分:请求数据也叫主体,可以添加任意的其他数据。

这个例子的请求数据为空。

POST请求例子,使用Charles抓取的request:

POST / >

第一部分:请求行,第一行明了是post请求,以及>

>

一般情况下,服务器接收并处理客户端发过来的请求后会返回一个>

>

例子

>

第一部分:状态行,由>

第一行为状态行,(>

第二部分:消息报头,用来说明客户端要使用的一些附加信息

第二行和第三行为消息报头,
Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8

第三部分:空行,消息报头后面的空行是必须的

第四部分:响应正文,服务器返回给客户端的文本信息。

空行后面的html部分为响应正文。

请求返回状态码:

200 OK  当您的 *** 作将在响应正文中返回数据时,出现此结果。

204 No Content 当您的 *** 作成功,但不在响应正文中返回数据时,出现此结果。

304 Not Modified(重定向)  当测试实体自上次检索以来是否被修改时,出现此结果。

403 Forbidden   客户端错误

401 Unauthorized 客户端错误

413 Payload Too Large(客户端错误) 当请求长度过长时,出现此结果。

400 BadRequest(客户端错误) 当参数无效时,出现此结果。

404 Not Found(客户端错误) 当资源不存在时,出现此结果。

405 Method Not Allowed(客户端错误)由于方法和资源组合不正确而出现此错误。 例如,您不能对一个实体集合使用 DELETE 或 PATCH。

412 Precondition Failed  客户端错误

501 Not Implemented(服务器错误) 当未实施某个请求的 *** 作时,出现此结果。

503 Service Unavailable(服务器错误) 当 Web API 服务不可用时,出现此结果。

GET与POST:

 “get”方法提交的数据会直接填充在请求报文的URL上,如“ >

      “post”方法提交的数据会附在正文上,一般请求正文的长度是没有限制的,但表单中所能处理的长度一般为100k(不同协议不同浏览器不一样),而且需要考虑下层报文的传输效率,不推荐过长。

      所以GET方法可以用来传输一些可以公开的参数信息,解析也比较方便,如百度的搜索的关键词,而POST方法可以用来提交一个用户的敏感信息(如果不使用>

主要特点

1、无连接

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

2、无状态

>

3、简单快速

客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于>

4、灵活

>

5、支持B/S及C/S模式

Web应用程序的无状态,一个客户端的请求,在其请求完成后,服务器端都会删除这个请求的相关信息。有时我们需要Web请求完成后,还要继续保持信息,在传统的Web编程中最常用的有两种方式:Session、Cookies,但是这两种传统的方式,都有其弊端,Session会增加服务器的负担,Cookies则会依赖客户端,要求客户端必须支持Cookies,同时Cookies是存在客户端的计算机上,所以可能有安全问题。

无状态是针对于“状态”来说的。
一个WEB应用协议中的“状态”指的是,为两个相互关联的用户交互 *** 作保留某种公共信息,例如用户登录信息,工作流等。
这些信息具有不同作用域,如page,request,session,application等。通常由服务器负责保存这些信息。
“无状态”
的概念逐渐流行,得益于分布式系统的发展。首先,无状态请求易于实现负载均衡。在分布式web系统下,有多个可用服务器,每个服务器都可以处理客户端请求。

传统的有状态请求,因为状态信息只保存在第一次发起请求的那台服务器上,之后的请求都只能由这台服务器来处理,服务器无法自由调度请求。无状态请求则完全没有这个限制。其次,无状态请求有较强的容错性和可伸缩性。如果一台服务器宕机,无状态请求可以透明地交由另一台可用服务器来处理,而有状态的请求则会因为存储请求状态信息的服务器宕机而承担状态丢失的风险。
需要注意的是,“状态"指请求的状态,而不是资源的状态。Restful风格的无状态约束要求服务器不保存请求状态,如果确实需要维持用户状态,也应由客户端负责。传递user
credentials 是Restful的,而传递sessionID是unRestful的,因为session信息保存在服务器端。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13265701.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-29
下一篇 2023-06-29

发表评论

登录后才能评论

评论列表(0条)

保存