Cookie 的规范介绍

目前有以下几种 Cookie 规范:

  • Netscape cookie 草案:是最早的 cookie 规范,基于 rfc2109。尽管这个规范与 rc2109 有较大的差别,但是很多服务器都与之兼容。
  • rfc2109, 是 w3c 发布的第一个官方 cookie 规范。理论上讲,所有的服务器在处理 cookie( 版本 1) 时,都要遵循此规范。遗憾的是,这个规范太严格了,以致很多服务器不正确的实施了该规范或仍在使用 Netscape 规范。
  • rfc2965 规范定义了 cookie 版本 2,并说明了 cookie 版本 1 的不足。

rfc2965 规范的使用,目前并不多。rfc2109 规范相应要严格得多,在实际应用上,并不是所有的浏览器和 Web 服务器都严格遵守。因此相比较而言,Netscape cookie 草案倒是一个比较简洁和被广泛支持的 Cookie 规范,因此我们在这里以 Netscape cookie 草案为基础进行讨论,对于其他两种规范,我们的讨论和代码具有相同的意义。关于 Netscape cookie 草案的细节,大家可以参照 Netscape 官方站点,这里我们列举一些和我们讨论有关的内容。

根据 Netscape cookie 草案的描述,Cookie 是 Web 服务器向用户的浏览器发送的一段 ASCII 码文本。一旦收到 Cookie,浏览器会把 Cookie 的信息片断以"名 / 值"对 (name-value pairs) 的形式储存保存在本地。这以后,每当向同一个 Web 服务器请求一个新的文档时,Web 浏览器都会发送之站点以前存储在本地的 Cookie。创建 Cookie 的最初目的是想让 Web 服务器能够通过多个 HTTP 请求追踪客户。有些复杂的网络应用需要在不同的网页之间保持一致,它们需要这种会话状态的保持能力。

浏览器与 Web 服务器通过 HTTP 协议进行通讯,而 Cookie 就是保存在 HTTP 协议的请求或者应答头部(在 HTTP 协议中,数据包括两部分,一部分是头部,由一些名值对构成,用来描述要被传输数据的一些信息。一部分是主体 (body),是真正的数据(如 HTML 页面等))进行传送的。

在 HTML 文档被发送之前,Web 服务器通过传送 HTTP 包头中的 Set-Cookie 消息把一个 cookie 发送到用户的浏览器中。下面是一个遵循 Netscape cookie 草案的完整的 Set-Cookie 头:


 Set-Cookie:customer=huangxp; path=/foo; domain=.ibm.com; expires= Wednesday, 19-OCT-05 23:12:40 GMT; [secure] 


Set-Cookie 的每个属性解释如下:

  • Customer=huangxp 一个"名称=值"对,把名称 customer 设置为值"huangxp",这个属性在 Cookie 中必须有。
  • path=/foo 控制哪些访问能够触发 cookie 的发送。如果没有指定 path,cookie 会在所有对此站点的 HTTP 传送时发送。如果 path=/directory,只有访问 /directory 下面的网页时,cookie 才被发送。在这个例子中,用户在访问目录 /foo 下的内容时,浏览器将发送此 cookie。如果指定了 path,但是 path 与当前访问的 url 不符,则此 cookie 将被忽略。
  • domain=.ibm.com 指定 cookie 被发送到哪台计算机上。正常情况下,cookie 只被送回最初向用户发送 cookie 的计算机。在这个例子中,cookie 会被发送到任何在 .ibm.com 域中的主机。如果 domain 被设为空,domain 就被设置为和提供 cookie 的 Web 服务器相同。如果 domain 不为空,并且它的值又和提供 cookie 的 Web 服务器域名不符,这个 Cookie 将被忽略。
  • expires= Wednesday, 19-OCT-05 23:12:40 GMT 指定 cookie 失效的时间。如果没有指定失效时间,这个 cookie 就不会被写入计算机的硬盘上,并且只持续到这次会话结束。
  • secure 如果 secure 这个词被作为 Set-Cookie 头的一部分,那么 cookie 只能通过安全通道传输(目前即 SSL 通道)。否则,浏览器将忽略此 Cookie。

一旦浏览器接收了 cookie,这个 cookie 和对远端 Web 服务器的连续请求将一起被浏览器发送。例如 前一个 cookie 被存入浏览器并且浏览器试图请求 URL http://www.ibm.com/foo/index.html 时,下面的 HTTP 包头就被发送到远端的 Web 服务器。

GET /foo/index.html HTTP/1.0
Cookie:customer=huangxp


一次典型的网络浏览过程

在了解了 Cookie 协议的一些基本内容之后,让我们看看一次典型的网络浏览过程中浏览器如何识别和处理 Cookie:

    • 浏览器对于 Web 服务器应答包头中 Cookie 的操作步骤:
      1. 从 Web 服务器的应答包头中提取所有的 cookie。
      2. 解析这些 cookie 的组成部分(名称,值,路径等等)。
      3. 判定主机是否允许设置这些 cookie。允许的话,则把这些 Cookie 存储在本地。
    • 浏览器对 Web 服务器请求包头中所有的 Cookie 进行筛选的步骤:
      1. 根据请求的 URL 和本地存储 cookie 的属性,判断那些 Cookie 能被发送给 Web 服务器。
      2. 对于多个 cookie,判定发送的顺序。
      3. 把需要发送的 Cookie 加入到请求 HTTP 包头中一起发送。

转载于:https://www.cnblogs.com/zcy_soft/archive/2013/03/14/2958793.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unix修改服务器时间格式,处理unix中的日期格式

以下sql代码将插入文本文件中,作为input.txt的输入:insert into t_agg_sgsn_gprs_usageselectserved_imsi as imsi,served_msisdn as msisdn,NVL(cell_identity,-1) as cell_id,NVL(trim(to_char(location_area_code,99999999)),UNKNOWN),substr(served_…

借口很多呀嘛接口也很多呀嘛态也很多

关于多接口,我还是要总结一下,学习了这么多不总结不是浪费了么。哎 多接口可以实现多态性! 首先,来我们先来定义一个接口 Public Interface IFullname Function GetFullName(ByVal a As String, ByVal b As String) As Stri…

文档服务器设置密码,文档服务器设置密码

文档服务器设置密码 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。当云服务器密码即将过期、密码泄露或首次登录时(首次登录云服务…

服务器mysql如何添加数据库文件,如何在使用MySQL作为嵌入式服务器时创建数据库文件...

我试图构建一个应用程序,该应用程序将使用MySQL嵌入式数据库(目前在OS X上,但最终在OS X和Windows上)以及I我以this example为起点。我已经成功地能够建立它,使用cmake这个CMakeLists文件:如何在使用MySQL作为嵌入式服务器时创建数…

地质灾害防治条例释义的摘要

最近把几年前出的《地质灾害防治条例释义》细细研读了一番,虽然这个条例作为我们这个领域的最高规范文件我看了很多遍,但很多条目如果不看释义还是不能深入领会,所以即使是多年前的材料,但依然很有收获,摘录部分内容如…

virtualbox下安装archlinux

之前用vmware安装archlinux,但一直不能使用startx,在尝试了n次后,放弃了,后改用virtualbox,在virtualbox下安装挺顺利的,只要参考wiki和其他的文章。但在装完后使用的时候遇到了几个小问题 问题1&#xff1…

关于V$OPEN_CURSOR

在之前的一次讨论中,有同行指出V$OPEN_CURSOR中列出的不是OPEN CURSOR而是SESSION CACHED CURSOR,原因是在一次ORA-01000(maximum open cursors exceeded)事故中他没有从V$OPEN_CURSOR中找到大量的打开游标。 对于这个问题,我们可以利用JAVA程…

SQL中常用的的时间跟日期函数

GETDATE函数: 用途:前系统日期、时间 举例:select getdate() Dateadd函数: 用途:在向指定日期加上一段时间的基础上,返回新的 datetime值: 举例:向日期加上2天,select d…

软件工程导论课程主页 :12-13-2

关于课程 教师:徐强 — 喜欢和享受编程的人。 学生:热爱编程的同学。 40名同学是: 白炳博 陈祥男 何 毓 李 坤 毛荣景 王立华 吴嘉烽 虞邦瑞毕 生 丁佳楠 蒋 冰 梁高升 彭 宏 …

chmod修改权限

1.创建一个新文件 touch file_name 注意:linux没有文件拓展名的概念,创建时是什么样的就是什么样的!!! 2.查看权限 d:代表是一个目录 -:普通文件 r:读权限 w:写/修改的权限 x…

python学习之 字符串前'r'的用法

6.4.3 原始字符串操作符( r/R ) 关于原始字符串的目的,在 Python1.5 里面已经有说明,是为了对付那些在字符串中出现的特殊字符(下面的小节会介绍这些特殊字符)。在原始字符串里,所有的字符都是直接按照字面的意思来使用,没有转义特…

chown 和chgrp 软链接

1.修改文件所属主:chown -R -h owner file_name -R:对该目录下属所有子目录进行同样的操作 -h :修改符号链接文件的属主十不影响链接的使用 eg:chown paper project 文件project的所有权限都给了paper这个人 2.修改文件的…

初始化--代码

public class A{public static int X; //1static A(){X B.Y 1; //2 找B.Y时就会执行YA.X1;}}public class B{public static int Y A.X 1;static B(){}} 调用A.X B.Y,调用时,几乎同时执行类内部的静态数据成员,结果X0,Y1,再调用静态构造函数&a…

WebConfig Authorization 节点

授权的目的是确定是否应该授予某个标识对给定资源请求的访问权限类型。有两种基本方式来授予对给定资源的访问权限: 文件授权文件授权由 FileAuthorizationModule 执行,它在使用 Windows 身份验证时处于活动状态。它执行 .aspx 或 .asmx 处 理程序文件的…