小文本——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,即以字节数组形式存储在内存中,好处就是避免多余的转码操作影响性能。
喜欢研究java的同学可以交个朋友,下面是本人的微信号:
小文本——Cookies的更多相关文章
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:设定小文本
<!DOCTYPE html> <html> <head> <title>菜鸟教程(runoob.com)</title> <meta ...
- 75篇关于Tomcat源码和机制的文章
75篇关于Tomcat源码和机制的文章 标签: tomcat源码机制 2016-12-30 16:00 10083人阅读 评论(1) 收藏 举报 分类: tomcat内核(82) 版权声明:本文为 ...
- Java EE : 二、图解 Cookie(小甜饼)
目录 Java EE : 一.图解Http协议 Java EE : 二.图解 Cookie(小甜饼) Java EE : 三.图解Session(会话) 概述 一.概述 二.详细介绍Cookie 传输 ...
- JavaEE 要懂的小事:二、图解 Cookie(小甜饼)
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
- jquery缓存使用jquery.cookies.2.2.0.min.js
$.cookies.set(key, obj, { hoursToLive: 2}); key标识的键 , obj存入的值可以缓存json对象, hoursToLive 缓存小时数 $.cookies ...
- Android小项目之十二 设置中心的界面
------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...
- PS小实验-去除水印
PS小实验-去除水印 水印是一些品牌商覆盖在图片或视频上的一个商标logo或小文本,比如大家最讨厌的百度logo,作者本人也是比较讨厌水印的,让好端端的一张图片变得美中不足. 个人觉得用photosh ...
- NLP系列(3)_用朴素贝叶斯进行文本分类(下)
作者: 龙心尘 && 寒小阳 时间:2016年2月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50629110 ...
- 【OCR技术系列之五】自然场景文本检测技术综述(CTPN, SegLink, EAST)
文字识别分为两个具体步骤:文字的检测和文字的识别,两者缺一不可,尤其是文字检测,是识别的前提条件,若文字都找不到,那何谈文字识别.今天我们首先来谈一下当今流行的文字检测技术有哪些. 文本检测不是一件简 ...
随机推荐
- linux下磁盘分区详解 图文(fdisk;mkfs)
linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a-d)因为IDE硬盘最多四个,SCSI,SATA,USB硬盘为sdx(x为a-z)),硬盘主分区最多为4个,不 ...
- WebApplicationContext类的作用
WebApplicationContext是实现ApplicationContext接口的子类.是专门为WEB应用准备的.作用: 1.它允许从相对于Web根目录的路径中加载配置文件完成初始化工作.从W ...
- c#下winform的ftp上传
/* FTPFactory.cs Better view with tab space=4 Written by Jaimon Mathew (jaimonmathew@rediffmail.com) ...
- CRM客户关系管理系统(五)
第五章.分页功能开发 5.1.修改BaseKingAdmin和完善前段页面显示 现在访问没有注册的model会报错,因为基类中没有写list_display和list_filter. 在基类中设置一个 ...
- 安全框架Shiro
原文地址:https://www.cnblogs.com/learnhow/p/5694876.html 一.架构 要学习如何使用Shiro必须先从它的架构谈起,作为一款安全框架Shiro的设计相当精 ...
- Linux SWAP 交换分区配置说明
一.SWAP 说明1.1 SWAP 概述 当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的 ...
- Android存储之SQLite数据库
Android存储之SQLite数据库数据库 创建数据库 package --; import android.content.Context; import android.database.sql ...
- RxJava(十一)defer操作符实现代码支持链式调用
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52597643 本文出自:[余志强的博客] 一.前言 现在越来越多An ...
- [系统运维]Supervisord安装和启动程序
supervisord 是client/server 系统 把不是守护进程的进程变成守护进程 监控它自己启动的进程,类似于看门狗 可以作为开机启动的一种封装 可以精确控制进程的状态,而不是pidfil ...
- Python 2.7的字典实现简化版(C语言)
这是一个能自动调整大小的哈希字典,外部接口实现了下列功能. 1.字典级别: 创建字典 dict_new 归零字典 dict_clear 2.键值级别: 查找 dict_search 强制查找 dict ...