小文本——Cookies

简介: http协议的无状态性导致在需要会话的场景下寸步难行,例如一个网站为了方便用户,在一段时间内登录过改网站的浏览器客户端实现自动登录,为实现这种客户端与服务器之间的会话机制需要额外的一些标识,http头部引入的Cookies正是客户端与服务器会话机制的基础。

http协议的无状态性导致在需要会话的场景下寸步难行,例如一个网站为了方便用户,在一段时间内登录过改网站的浏览器客户端实现自动登录,为实现这种客户端与服务器之间的会话机制需要额外的一些标识,http头部引入的Cookies正是客户端与服务器会话机制的基础。当一个浏览器通过http协议访问某服务器时,服务器可以将指定的一些键值对发往客户端,客户端根据域名保存于本地,下次访问此域名时浏览器会连同此些键值对带到服务器端,这样就实现了服务器与客户端之间的会话机制。

①   客户端第一次访问的报文(无cookies):

GET /web/index.jsp HTTP/1.1

Accept-Language:zh-CN

User-Agent:Mozilla/5.0(Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63Safari/537.36

HOST:localhost:8080

Connection:Keepp-Alive

②   服务器响应报文:

HTTP/1.1 200 OK

Content-Length: 3000

Content-Type:text/html;charset=utf-8   

Set-Cookie:user=lilei;weight=70kg

Connection: Keep-Alive

③   客户端第二次访问(带cookies):

GET /web/index.jsp HTTP/1.1

Accept-Language:zh-CN

User-Agent:Mozilla/5.0(Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63Safari/537.36

HOST:localhost:8080

Connection:Keepp-Alive

Cookie:user=lilei;weight=70kg

第一次访问localhost:8080/web/index.jsp时浏览器搜索本地无相关cookies,服务器接收报文后做出响应,通过http协议的Set-Cookies头部把user=lilei;weight=70kg返回浏览器,浏览器把cookies信息保存到本地,第二次访问时浏览器搜到有相关的cookies并发往服务器,服务器收到信息知道此浏览器之前是lilei用户使用,并且他的体重是70kg,服务器可根据用户信息做一些个性化处理,这就是cookies。

Cookies将信息储存在客户端,每次通信都要将这些信息附带在报文里面,这会导致带宽浪费、敏感数据安全、对复杂结构数据力不从心等等问题,每次访问都把cookies发送到服务器,当cookies较大时明显有带宽浪费问题,假如将用户名密码放到客户端显然存在安全问题,cookies对于非键值对结构的数据肯定力不从心。针对这些问题提出一种解决方案——服务器会话Session,将数据存在服务器无需客户端携带,数据安全更加可控且数据结构可以任意复杂。当然,这种Session的实现也要依靠cookies,服务器把一个唯一值JSESSIONID发往客户端,每个唯一值表示一个客户端,客户端与服务器通信时携带此唯一值,服务器根据唯一值寻找属于此客户端的所有数据。服务器会话并非本章节要讨论的重点,将在后面相关章节再深入探讨实现原理。

重新回到cookies,浏览器将cookies发往tomcat服务器后,tomcat需要将这些信息封装成对象,如下图,Cookies对象包含了若干个ServerCookie,而每个ServerCookie主要包含了name和value,即键值对。当然还包括其他参数,例如maxAge表示cookie过期时间,path表示cookie存放子路径,domain表示服务器主机名。另外还有其他参数,读者可自行查阅http协议的cookie标准,有个参数需要特别说明下,secure参数表示是否使用SSL安全协议发送cookies,避免明文被网络拦截。这些变量保存在Tomcat中的类型都为MessageBytes,即以字节数组形式存储在内存中,好处就是避免多余的转码操作影响性能。






点击订购作者《Tomcat内核设计剖析》



目录
打赏
0
0
0
0
36
分享
相关文章
使用NekoHTML解析HTML并提取META标签内容
关于NekoHTML的代码样例,这里提供一个简单的示例,用于展示如何使用NekoHTML来解析HTML文档并提取其中的信息。请注意,由于NekoHTML的具体实现和API可能会随着版本更新而有所变化,以下代码仅供参考。 ### 示例:使用NekoHTML解析HTML并提取META标签内容 ```java import org.cyberneko.html.parsers.DOMParser; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml
126 1
HTML内容爬取:使用Objective-C进行网页数据提取
HTML内容爬取:使用Objective-C进行网页数据提取
Scrapy中response介绍、属性以及内容提取
Scrapy中response介绍、属性以及内容提取
375 0
浏览器Header和cookie字符串形式转Json
浏览器Header和cookie字符串形式转Json
196 0
浏览器Header和cookie字符串形式转Json
获取cookies
网页开发者工具
231 0
获取cookies
cookies之事一二三
HTTP cookies,通常简称为cookies,起初是用来在客户端的会话信息。服务端的响应会在HTTP header中通过Set-Cookie加入会话信息:
122 0
理解cookies
目录 理解cookies 1. 什么是cookies 2. cookies存在的意义 3.如何使用cookies 4. cookies安全 参考 理解cookies ​ 对于一个web开发者来说,了解基本的http协议是必不可少的,只有基础扎的牢,才能在使用的时候游刃有余。
1261 0
Cookie设置HttpOnly属性
在Servlet 3.0中增加对Cookie(请注意,这里所说的Cookie,仅指和Session互动的Cookie,即人们常说的会话Cookie)较为全面的操作API。
3822 0
Python网络爬虫之爬取网页的含义和URL基本构成
最近有点时间在玩爬虫,看到网上很多喜欢的照片、电源以及图书等资源,心想能不能通过所学的Python技术把它给拿下来并保存在文件夹中,网上找了一下资料。发现,可以通过网络爬虫技术将网络上的资源下载下来,爬虫之路即将开始,现将手记做下记录。
1467 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等