HTTP 是种无状态的协议,即使用 HTTP 协议时,每次发送请求都会产生对应的新响应,协议本身不会保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成简单化。随着 Web 的不断发展,因无状态而导致业务处理变得棘手的情况增多了。比如,用户登录到一家购物网站,即使他跳转到该站的其他页面后,也需要能继续保持登录状态。为了实现管理状态,便引入了 Cookie 技术。

Cookie 是如何工作的

(a) 用户第一次访问 Web 站点,Web 服务器对用户一无所知。

(b) Web 服务器希望这个用户下次访问该站点时,可以识别出它来。所以通过 Set-Cookie(或 Set-Cookie2)向客户端回送一个独有的 cookie。上图中,服务器会将一个表示 id="34294" 的 cookie 返回给用户。服务器可以用这个数字来查找服务器为其访问者累积的数据库信息。cookie 并不仅限于保存 ID 号。很多 Web 服务器都会将信息以名值对的形式直接保存在 cookie 中。

(c) 浏览器接收到 Web 服务器的响应,会将 Set-Cookie(或 Set-Cookie2)首部中的 cookie 内容保存在本地。将来用户再次访问同一站点时,浏览器会将 cookie 的内容取出,并通过 Cookie 请求首部将其传回去,以此来标识自己的身份。

Cookie Jar

当 Web 服务器通过 Set-Cookie 响应首部返回 cookie 时,浏览器会将 cookie 的内容保存在本地。 Set-Cookie 首部的形式如下:

Set-Cookie: name=value[; expires=DATE][; path=PATH][; domain=DOMAIN][; secure][; HttpOnly]

不同的浏览器会以不同的方式来存储 cookie,但本质上都是纯文本的形式。以网景 Navigator 存储 cookie 的文本文件为例:

# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
#
# domain allh path secure expiration name value .localhost TRUE /hello FALSE 1442545174 userid huey2672

文本文件中的每一行都代表一个 cookie。有 7 个用 tab 键分隔的字段。

domain 字段
通过 Cookie 的 domain 字段指定的域名可做到与结尾匹配一致。比如,当指定 example.com 后,除 example.com 以外,www.example.com 或 www2.example.com 等都可以发送 Cookie。

allh 字段
Cookie 的 allh 字段指定是否域中所有的主机都获取 cookie,还是只有指定了名字的主机获取。

path 字段
Cookie 的 path 字段可用于限制指定 cookie 的发送范围的文件目录。

secure 字段
secure 字段指定是否只有在使用 SSL 连接时才发送这个 cookie。

expiration 字段
Cookie 的 expiration 字段指定浏览器可发送 cookie 的有效期。当 Set-Cookie 首部省略 expires 字段时,其有效期仅限于维持浏览器会话时间段内。这通常限于浏览器应用程序被关闭之前。另外,一旦 cookie 从服务器端发送至客户端,服务器端就不存在可以显示删除 cookie 的方法。但可通过覆盖已过期的 cookie,实现对客户端 cookie 的实质性删除操作。

name 字段
cookie 的名称

value 字段
cookie 的值

httponly 字段
httponly 字段没有保存在文本文件中,它是 Cookie 的扩展功能,它使 JavaScript 脚本无法获得 cookie。其主要目的是为防止跨站脚本攻击(Cross-site scripting ,XSS)对 cookie 的信息窃取。

HTTP - Cookie 机制的更多相关文章

  1. HTTP Session、Cookie机制详解

    一.什么是http session,有什么用 HTTP协议本身是无状态的,本身并不能支持服务端保存客户端的状态信息,于是,Web Server中引入了session的概念,用来保存客户端的状态信息. ...

  2. HTTP的客户端识别与cookie机制

    本文是<HTTP权威指南>的读书笔记 Web服务器可能同时在与数千个客户端同时进行会话,服务器需要记录下它们在与谁交谈,而不是认为所有的请求都来自于匿名客户端.在HTTP中可以有以下几种方 ...

  3. cookie机制和session机制的原理和区别[转]

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于在服务器端保持状态的 ...

  4. cookie机制

    Cookie通过在客户端记录信息确定用户身份 一个用户的所有请求操作都应该属于同一个会话, HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接. ...

  5. cookie机制和session机制的区别(面试题)

    一.cookie机制和session机制的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案. 同时我们也看到,由于才服务器端保持状态的 ...

  6. 转:【WebView的cookie机制 】轻松搞定WebView cookie同步问题

    原文链接:http://blog.csdn.net/fengyuzhengfan/article/details/51517622 在进行APP+H5混合开发的时候,一些功能是用native方法实现的 ...

  7. [py]flask操作cookie&django的seesion和cookie机制

    浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...

  8. 和我一起学《HTTP权威指南》——客户端识别与cookie机制

    客户端识别与cookie机制 服务器需要区别是哪个客户端. 个性化接触 HTTP是匿名.无状态的请求/响应协议. Web站点希望: 对客户端的用户有更多的了解 追踪用户浏览页面的行为 因此,产生了几种 ...

  9. HTTP协议中的COOKIE机制简单理解

    1.为什么会有COOKIE这种机制 首先一种场景, 在一个网站上面, 我发起一次请求,那服务器怎么知道我是谁?是谁发起的这次请求呢, HTTP协议是无状态的协议, 浏览器的每一次请求,服务器都当做一次 ...

  10. 深入理解Session和Cookie机制

    具体来说cookie机制采用的是在客户端保持状态的方案.它是在用户端的会话状态的存贮机制,他需要用户打开客户端的cookie支持.cookie的作用就是为了解决HTTP协议无状态的缺陷所作的努力. 而 ...

随机推荐

  1. Android流量监控 思路,想法

    1,开启一个服务,每5分钟跑动一次更新流量,用于能够准确记录流量         每一个小时,更新一次流量,用于清除非本月的流量 2,保存流量的时候,进行判断         a,若是数据库中保存的 ...

  2. Codeforces Round #250 (Div. 1) D. The Child and Sequence (线段树)

    题目链接:http://codeforces.com/problemset/problem/438/D 给你n个数,m个操作,1操作是查询l到r之间的和,2操作是将l到r之间大于等于x的数xor于x, ...

  3. angular 管理后台

    http://blog.csdn.net/iamnieo/article/details/50474399

  4. ACE的包装器

    ACE大量运用包装器模式,以期改变面向过程的系统API可视性以及错误处理较难的情况 包装器在若干场合能极大简化代码量,甚至是编码过程 比如ACE_Thread_Mutex 对象创建会自动初始化,很开心 ...

  5. Vieta定理

    一元$n$次方程$$P(x)=a_{n}x^{n}+a_{n-1}x^{n-1}+\cdots+a_{a}x+a_{0}=a_{n}(x-x_{1})(x-x_{2})\cdots (x-x_{n}) ...

  6. java对象转JSON JS取JSON数据

    JsonConfig config = new JsonConfig(); config.setJsonPropertyFilter(new PropertyFilter() { @Override ...

  7. C#用天气预报的WebServices

    后台代码: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { WeatherWS ws = new W ...

  8. CreateProcess的使用方法

    使用编译器vs2008. 第一.第二个參数的使用方法: 样例: 使用ie打开指定的网页. 注意第二个參数是 可运行文件+命令行參数 #include "stdafx.h" #inc ...

  9. [Angular 2] More on *ngFor, @ContentChildren & QueryList<>

    In previous artical, we introduce the how to use *ngFor. The limitation for previous solution to dis ...

  10. Python学习 之 文件

    1.文件读写 python进行文件读写的函数是open或file file_handler=open(filename,,mode) (1)打开并读取文件 方式一:open() fo=open('/r ...