TCP/IP协议二十:HTTP协议详解(2)HTTP Cookie说明

TCP/IP协议五:HTTP协议详解
https://blog.csdn.net/lqy971966/article/details/105982328

1. Cookie的背景

1.1 HTTP是一种无状态协议

HTTP 是一种不保存状态,即无状态(stateless)协议
也就是说HTTP对于发送过的请求或响应都不做持久化处理。

无状态说明:

使用 HTTP 协议,每当有新的请求发送时,就会有对应的新响应产生。

1.2 无状态优点:

这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的,
所以才会被应用在各种场景里。
由于不必保存状态,自然可减少服务器的 CPU 及内存资源的消耗

1.3 无状态缺点:

HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。
也就是说,无法根据之前的状态进行本次的请求处理

1.每次访问都像第一次访问一样,无法判断用户是否访问过
2.任何的购买等交互、验证行为都必须在一次访问中完成
3.无任何记忆,均需要用户重新点击或填写

例如:

	在访问某些资源时,用户往往需要登录,重复认证多次,体验很差。

2. Cookie

2.1 Cookie的产生:

HTTP/1.1 虽然是无状态协议,但为了实现期望的保持状态功能,于是引入了Cookie 技术。
有了 Cookie 再用 HTTP 协议通信,就可以管理状态了。
现象:当多次访问某些资源时,用户登录不需要重复认证多次了

2.2 Cookie实现:

Cookie 技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。

2.3 cookie 过程说明:

1. 当用户通过浏览器第一次访问服务器的时候,服务器肯定是不知道他的身份的。
	所以,就要创建一个独特的身份标识数据,格式是“key=value”,然后放进 Set-Cookie 字段里,
	随着响应报文一同发给浏览器。

2. 浏览器收到响应报文,看到里面有 Set-Cookie,知道这是服务器给的身份标识,于是就保存起来,
   下次再请求的时候就自动把这个值放进 Cookie 字段里发给服务器。

3. 因为第二次请求里面有了 Cookie 字段,服务器就知道这个用户不是新人,之前来过,
	就可以拿出Cookie里的值,去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。
	识别出用户的身份,然后提供个性化的服务。

图说明:
cookie 流程说明.png
在这里插入图片描述

2.3.1 cookie例子:

一个server端的响应:
	HTTP/2.0 200 OK
	Content-Type: text/html
	Set-Cookie: name=hani
	Set-Cookie: site=www.hani.com
	
当浏览器接收到这个响应之后,就会在本地的cookies中设置对应的值
	GET /test.html HTTP/2.0
	Host: www.hani.com
	Cookie: name=hani; site=www.hani.com

2.3.2 cookie 报文说明:

server Set-Cookie
在这里插入图片描述
在这里插入图片描述
client 再次连接时,带Cookie值
在这里插入图片描述

2.4 cookie作用:

1. 会话管理
	1.1 记录用户的登录状态是cookie最常用的用途
	1.2 记录用户的访问状态,例如导航啊,用户的注册流程啊
	
2. 个性化信息
	2.1 Cookie也经常用来记忆用户相关的信息,以方便用户在使用和自己相关的站点服务
		如 微信,qq再次登录的时候会记录微信号,qq 
	2.2 Cookie也被用来记忆用户自定义的一些功能
		如 google将搜索设置(使用语言、每页的条数,以及打开搜索结果的方式等等)保存在一个COOKIE里
		
3. 记录用户的行为
	3.1 最典型的是公司的TCSS系统。
		它使用Cookie来记录用户的点击流和某个产品或商业行为的操作率和流失率。

2.5 cookie分类:

1. Session Cookie
	这个类型的cookie只在会话期间内有效,即当关闭浏览器的时候,它会被浏览器删除。
	设置session cookie的办法是:在创建cookie不设置Expires即可。
	
2. Persistent Cookie
	持久型cookie顾名思义就是会长期在用户会话中生效。
	当你设置cookie的属性Max-Age为1个月的话,那么在这个月里每个相关URL的http请求中都会带有这个cookie
	
3. Secure cookie
	安全cookie是在https访问下的cookie形态,以确保cookie在从客户端传递到Server的过程中始终加密的
	
4. HttpOnly Cookie
	目前主流的浏览器已经都支持了httponly cookie。
	那么cookies是不允许被JavaScript访问的,通过设置HttpOnly,我们可以提升客户端数据的安全性:
	也就是说httponly cookie对客户端脚本语言(javascript)无效,从而避免了跨站攻击时JS偷取cookie的情况

2.6 Cookie的实现

Cookie是web server下发给浏览器的任意的一段文本,在后续的http 请求中,浏览器会将cookie带回给Web Server。
同时在浏览器允许脚本执行的情况下,Cookie是可以被JavaScript等脚本设置的。

2.7 cookie生存时间:

1. 一种是session cookies,这种cookies会在session结束之后自行删除。
	
2. 还有一种cookies通过指定Expires或者 Max-Age 来设置过期时间:
	Set-Cookie: id=abcdef; Expires=Thu, 31 May 2021 08:00:00 GMT;
	
	相对于Expires的精准的时间设置,在RFC 2965中规范提供了一个替代方案:
	Max-Age:seconds,来设置cookie在设置后多长秒后失效。

2.8 Cookie的内容限制/非法值:

在Cookie Version 0中,某些特殊的字符,例如:空格,方括号,圆括号,等于号(=),逗号,
双引号,斜杠,问号,@符号,冒号,分号都不能作为Cookie的内容。
	
2. Cookie 就是服务器委托浏览器存储在客户端里的一些数据,而这些数据通常都会记录用户的关键识别信息。

3.Cookie 最基本的用途是身份识别,实现有状态的会话事务

参考:

https://blog.csdn.net/weixin_39628945/article/details/111267110
https://blog.csdn.net/xili2532/article/details/99570485

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值