文档章节

HTTP之cookie

d
 duan2
发布于 2017/09/01 14:19
字数 764
阅读 9
收藏 0

持久连接节省通信量

HTTP 协议的初始版本中,每进行一次 HTTP 通信就要断开一次TCP 连接。

以当年的通信情况来说,因为都是些容量很小的文本传输,所以即使这样也没有多大问题。可随着 HTTP 的普及,文档中包含大量图片的情况多了起来。比如,使用浏览器浏览一个包含多张图片的 HTML 页面时,在发
送请求访问 HTML 页面资源的同时,也会请求该 HTML 页面里包含的其他资源。因此,每次的请求都会造成无谓的 TCP 连接建立和断开,增加通信量的开销

为解决上述 TCP 连接的问题,HTTP/1.1 和一部分的 HTTP/1.0想出了持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive 或 HTTP connection reuse)的方法。持久连接的特点
是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态

使用 Cookie 的状态管理

    HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。假设要求登录认证的 Web 页面本身无法进行状态的管理(不记录
已登录的状态),那么每次跳转新页面不是要再次登录,就是要在每次请求报文中附加参数来管理登录状态。不可否认,无状态协议当然也有它的优点。由于不必保存状态,自然可减少服务器的 CPU 及内存资源的消耗。从另一侧面来说,也正是因为 HTTP 协议本身是非常简单的,所以才会被应用在各种场景里。

    保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入了 Cookie 技术。Cookie 技术通过在请求和响应报文中写入Cookie 信息来控制客户端的状态。
Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie
值后发送出去。服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息

1. 请求报文(没有 Cookie 信息的状态)
GET /reader/ HTTP/1.1
Host: hackr.jp
*首部字段内没有Cookie的相关信息.


2. 响应报文(服务器端生成 Cookie 信息)
HTTP/1.1 200 OK
Date: Thu, 12 Jul 2012 07:12:20 GMT
Server: Apache
<Set-Cookie: sid=1342077140226724; path=/; ex
pires=Wed,
10-Oct-12 07:12:20 GMT>
Content-Type: text/plain; charset=UTF-8


3. 请求报文(自动发送保存着的 Cookie 信息)
GET /image/ HTTP/1.1
Host: hackr.jp
Cookie: sid=1342077140226724

 

© 著作权归作者所有

共有 人打赏支持
上一篇: HTTP之报文
下一篇: HTTP之URL
d
粉丝 0
博文 32
码字总数 31955
作品 0
郑州
私信 提问
cookie的工作原理

  Cookie是进行网站用户身份,实现服务端Session会话持久化的一种非常好方式。Cookie最早由Netscape公司开发,现在由 IETF 的RFC 6265标准备对其规范,已被所有主流浏览器所支持。   1. ...

大侠LKS
2016/10/11
19
1
HttpClient第三章 HTTP状态管理

原始的HTTP被设计成无状态的面向请求响应的协议,它并没有为基于跨几个逻辑相关的请求/响应交换的有状态会话提供所需的功能。但是随着HTTP协议越来越流行并且被应用,越来越多的系统开始用它...

zhuwensheng
2016/08/07
0
0
python 自动登陆网页原理

有些网站设置了权限,只有在登录了之后才能爬取网站的内容,如何模拟登录,目前的方法主要是利用浏览器cookie模拟登录。 浏览器访问服务器的过程 在用户访问网页时,不论是通过URL输入域名或...

oanyt
2015/06/08
0
0
F5负载均衡会话保持技术及原理技术白皮书

1.什么是会话保持? 在大多数电子商务的应用系统或者需要进行用户身份认证的在线系统中,一个客户与服务器经常经过好几次的交互过程才能完成一笔交易或者是一个请求的完成。由于这几次交互过...

晨曦之光
2012/03/09
178
0
聊一聊session和cookie

本来是想写aop设计机制的,但是最近被session这个东西搞得有点头大,所以就抽点时间来整理下关于session的一些东西。 目录 从http协议的无状态性说起 无连接和无状态 持久连接 http无状态 如...

glmapper
10/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

git reset放弃修改&放弃增加文件

1. 本地修改了一堆文件(并没有使用git add到暂存区),想放弃修改。 单个文件/文件夹: $ git checkout -- filename 所有文件/文件夹: $ git checkout . 2. 本地新增了一堆文件(并没有git a...

JamesView
4分钟前
0
0
UnaryOperator函数式接口

这是一个函数式接口,因此可以用作lambda表达式或方法引用的赋值目标。 可以看到UnaryOperator<T>继承了Function<T,T>接口,这里可是两个T,T,还增加了static修饰的identity()方法。 然后我们...

woshixin
4分钟前
0
0
关于java包装类型的缓存

除了Float 和 Double 外,其他包装数据类型都会缓存 -128 ~127 的值,对于 Integer var = ? 在 -127~128 之间的赋值,Integer 对像由IntegerCache.cache 产生,会复用已有对像,这个区间内的...

Canaan_
8分钟前
1
0
mysql复合主键

表: CREATE TABLE `w_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`,`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 实践: 1、添加i......

shikamaru
8分钟前
0
0
记一下自己理解的SSL

步骤 操作 客户端钥匙(随机数)数量 服务端钥匙(随机数)数量 1 客户端生成一把钥匙, 发给服务器 1 0 2 服务器确认支持 1 1 3 服务器 生成一把钥匙 发给客户端,并且把公钥(证书)给他 ...

Gavin-King
11分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部