HTTP协议的官方定义进行归纳,得出4个关键点:
1.HTTP是建立在tcp/ip协议之上,面向应用层的超文本传输协议。
2.它由请求和响应组成,完全符合标准的客户端服务器的请求响应模型。
3.协议很轻便简单,并且请求与请求之间没有关联,是无状态的协议。
4.为了弥补这种无状态就需要使用http协议的扩展cookie,session等方法建立关联。
标准的http协议指的是不包含session,cookie是,application的http协议(无状态)。
之所以说是无状态,服务器上肯定会有用户的数据,这里的状态不是指用户的数据,无状态是指没有对本次会话设置一个缓存区,记录本次会话的状态。缓存区包括服务端和客户端,这个状态就是在临时会话中产生的数据(实现这些东西所凭借后面的缓存空间中的客户的临时数据)
更详细解释可以跳转:https://www.cnblogs.com/bellkosmos/p/5237146.html
http请求报文的header属性中,Transport头域中有个Connection:keep-Alive的
Connection:keep-alive:当一个网页打开完成后,客户端和服务器之间用于传输http数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
Connection:close:代表一个request完成后,客户端和服务器之间用于传输http数据的TCP连接会关闭,再次发送request时,需要重新建立TCP连接
Ps:从http/1.1开始,默认都开启了keep-alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输http数据的TCP连接不会被关闭。但keep-alive不会永久保留连接,他有一个保持时间,可以在不同的服务器软件中设定这个时间。
!!!看到这个http请求headers中的Connection:keep-Alive,会想到http协议不是无状态的吗,但是这个keep-alive是保持连接的意思啊?不要混淆。
答:http的无状态和Connection:keep-Alive是两个不同的概念。无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态,另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页是完全没关系的。http是一个无状态的,面向连接的协议,无状态不代表http不能保持TCP连接,更不能代表http使用的是无连接的UDP协议。
Cookie在http协议中的运用
http协议中与cookie相关的属性:
①cookie:客户端将服务器设置的cookie返回到服务器
②set-cookie:服务器向客户端设置cookie
服务器在响应消息中用set-cookie头将cookie的内容回送到客户端,客户端在新的请求中将相同的内容携带在cookie头中发送给服务器,从而实现会话的保持。
Session在http协议中的运用
当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含一个session标识,称为sessionID。如果已包含,则说明以前已经为此客户端创建过session,服务器就按照sessionID把这个session检索出来使用(如果检索不到,则会新建一个),如果客户端不包含sessionID,则为此客户端创建一个session,并且生成一个与此session相关联的sessionId.sessionID的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionID将被在本次响应中返回到客户端保存。
Session有两种实现方式:
①使用cookie来实现
服务器给每个session分配一个唯一的JSESSIONID,并通过cookie发送给客户端
当客户端发起新的请求的时候,将在cookie头中携带这个JSESSIONID.这样服务器能够找到这个客户端对应的session.
②使用url回写来实现
url回写是指服务器在发送给浏览器页面的所有连接中都携带JSESSIONID的参数,这样客户端点击任何一个链接都会把JSESSIONID带回服务器.
Token在http协议中的运用
运用token,服务器就不用再保存Session ID,只负责生成Token,然后验证Token.Token的传递通常被放在cookie中,如果客户端不支持cookie,token也可以放置在请求头中.和cookie一样,为了数据的安全性,token中不应该放如密码等敏感信息.
原文地址:https://www.cnblogs.com/kingxyt06/p/11657430.html