HTTP cookie格式与约束

news2024/11/28 18:54:41

cookie是前端编程当中经常要使用到的概念,我们可以使用cookie利用浏览器来存放用户的状态信息保存用户做了一些什么事情。

session是服务器端维护的状态。session又是如何和cookie关联起来。

后面介绍cookie和session的使用。

Cookie 是什么?

RFC6265, HTTP State Management Mechanism

保存在客户端(由服务器生成)、由浏览器维护、表示应用状态HTTP 头部(表明用户做了一些什么样的事情)

• 存放在内存或者磁盘中

• 服务器端生成 Cookie 在响应中通过Set-Cookie 头部告知客户端(允许多个 Set-Cookie 头部传递多个值)服务端生成了cookie是通过响应来返回的

• 客户端得到 Cookie 后,后续请求都会自动将 Cookie 头部携带至请求中

client端第一次访问是没有cookie的,server会在响应头部set-cookie中去传递一个key value给我们的客户端。客户端收到了这样key-value会保存在浏览器当中。当然可以传递多个set-cookie字段,每个字段后面都有key value。

客户端得到了cookie之后,后续的请求,只要访问这个域名下面所有的请求都会自动的将收到的cookie的key value携带进来。以cookie头部方式传递给server。

Cookie 与 Set-Cookie头部的定义

• Cookie 头部中可以存放多个 name/value 名值对

• cookie-header = "Cookie:" OWS cookie-string OWS

• cookie-string = cookie-pair *( ";" SP cookie-pair ) 可以有多个cookie pair,多个是以,进行分割的

• cookie-pair = cookie-name "=" cookie-value 每个以key/value的形式

浏览器保存了cookie-pair,在发送请求的时候就会将cookie发送出去了。可能有多个set-cookie头部,但是只有一个cookie头部就可以了,因为cookie可以存放多个cookie-pair。

Set-Cookie 头部一次只能传递 1 个 name/value 名值对,响应中可以含多个头部

• set-cookie-header = "Set-Cookie:" SP set-cookie-string 所有头部这块都一样

• set-cookie-string = cookie-pair *( ";" SP cookie-av )

• cookie-pair = cookie-name "=" cookie-value

• cookie-av:描述 cookie-pair 的可选属性 属性可以有0个或者多个,属性之间以分号作为分隔。

每个set-cookie头部对应的就是一个或者多个cookie pair。

在请求当中的cookie带入了很多键值对,之前响应当中的cookie也带入到请求当中了。

Set-Cookie 中描述 cookie-pair 的属性

cookie-av = expires-av / max-age-av / domain-av / path-av / secure-av / httponly-av / extension-av

expires-av = "Expires= " sane-cookie-date(这个cookie可以使用多久,会明确指定一个日期,超过这个时间点之后,这个cookie就作废,这样就要求浏览器将这个cookie清除掉)

• cookie 到日期 sane-cookie-date 后失效

max-age-av = "Max-Age= " non-zero-digit *DIGIT(以定时器的方式告诉浏览器,经过多少秒以后,)

• cookie 经过 *DIGIT 秒后失效。max-age 优先级高于 expires

domain-av = "Domain= " domain-value

• 指定 cookie 可用于哪些域名,默认可以访问当前域名(访问某些页面才能使用这个cookie)

path-av = "Path= " path-value

• 指定 Path 路径下才能使用 cookie

secure-av = "Secure“

• 只有使用 TLS/SSL 协议(https)时才能使用 cookie

httponly-av = "HttpOnly“

• 不能使用 JavaScript(Document.cookie 、XMLHttpRequest 、Request APIs)访问到 cookie

第一个set-cookie,他的cookie属性path描述的很清楚,这里都可以使用cookie,因为使用的是根路径。

只有访问这个路径的url才能去使用key value。httponly.......

Cookie 使用的限制

• RFC 规范对浏览器使用 Cookie 的要求

• 每条 Cookie 的长度(包括 name、value 以及描述的属性等总长度)至于要达到 4KB

• 每个域名下至少支持 50 个 Cookie

• 至少要支持 3000 个 Cookie

• 代理服务器传递 Cookie 时会有限制

在代理服务器传输cookie的时候,也会有限制,因为cookie是放在HTTP头部的,很多代理服务器会限制HTTP头部为4k 8k,像nginx默认支持32k。

所以生成cookie的origin server应当尽量减少每个cookie的大小。

在rest架构当中,会有很多厂商的浏览器,这些浏览器会以很多不同的版本同时出现。

Cookie 在协议设计上的问题

• Cookie 会被附加在每个 HTTP 请求中,所以无形中增加了流量

• 由于在 HTTP 请求中的 Cookie 是明文传递的,所以安全性成问题(除非用 HTTPS)

• Cookie 的大小不应超过 4KB,故对于复杂的存储需求来说是不够用的

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

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

相关文章

2022-2023年营销报告(B站平台) | 5大行业势态、流量大盘全景洞察

一直以来,手持高活跃、高粘性用户群体的B站是行业用来观察年轻人消费习惯的重要平台。以至于用户群体的不断壮大带动了B站的商业价值。如今B站的商业舞台越来越大,不断地向外界招手,欢迎更多品牌积极加入到这个千万年轻人聚集的内容社区。为了…

如何使用Kadence Blocks构建迷人的Kadence产品网格

在本教程中,我将逐步教您如何使用 Kadence Blocks 构建一个五列Kadence产品网格,它可以作为全宽区块放置在您的博客文章的顶部。使用这个包含五列的产品网格是在文章顶部展示产品、对每个产品进行简要描述,然后包含一个供用户访问该站点的按钮…

校园社交平台【源码好优多】

简介 本项目是为满足大学生的校园社交需求而设计的,动态模块提供发布/删除/搜索/点赞/收藏/评论动态功能,个人模块提供关注与私信以及用户修改个人信息功能,聊天模块提供即时聊天功能。该项目为前后端分离项目并且后端实现分布式&#xff0c…

蓝桥杯入门即劝退(十九)两两交换链表

-----持续更新蓝桥杯入门系列算法实例-------- 如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流! 你的点赞、关注、评论、是我创作的动力! -------希望我的文章对你有所帮助-------- 一、题目描述 给你一个链表,两两交换其中…

JavaEE简单示例——<select>中的查询参数传递和结果集封装自动映射关系

简单介绍&#xff1a; 在之前我们在讲SQL映射文件中的映射查询语句的<select>标签的时候&#xff0c;对其中的四个常用属性的讲解并不是那么的透彻&#xff0c;今天就来详细的解释<select>的四个常用属性的具体含义以及<select>标签在进行查询的时候查询参数…

LQB02控制LED灯,74HC138芯片,74HC02芯片,74HC573芯片。

一&#xff0c;硬件图解读。 二&#xff0c;控制LED需要的74HC595程序编程。 三&#xff0c;控制某个LED亮&#xff0c;其他保持不变&#xff0c;或者控制整8个LED&#xff0c;其他不变&#xff1b; 四&#xff0c;读取某个LED的状态&#xff0c;一秒时间读取一次&#xff0c;如…

mapreduce与yarn

文章目录一、MapReduce1.1、MapReduce思想1.2、MapReduce实例进程1.3、MapReduce阶段组成1.4、MapReduce数据类型1.5、MapReduce关键类1.6、MapReduce执行流程1.6.1、Map阶段执行流程1.6.2、Map的shuffle阶段执行流程1.6.3、Reduce阶段执行流程1.7、MapReduce实例WordCount二、…

版本控制软件SVN

SVN学习 1 版本控制软件定义及用途 版本控制软件是为适应软件配置管理的需要&#xff0c;控制软件的修改&#xff0c;减少混乱&#xff0c;提高软件生产效率&#xff0c;其是软件质量保证的重要环节软件配置管理是对软件修改进行标识、组织和控制的技术&#xff0c;用来协调和…

MASA MAUI Plugin (八)Android相册多选照片(Intent 方式)

背景 MAUI的出现&#xff0c;赋予了广大.Net开发者开发多平台应用的能力&#xff0c;MAUI 是Xamarin.Forms演变而来&#xff0c;但是相比Xamarin性能更好&#xff0c;可扩展性更强&#xff0c;结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项…

代码随想录NO49 | 动态规划 _LeetCode1143.最长公共子序列 1035.不相交的线 53. 最大子序和

动态规划 _LeetCode1143.最长公共子序列 1035.不相交的线 53. 最大子序和今天继续子序列问题&#xff01; 1143.最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符…

docker全解

目录说明docker简介为什么是docker容器与虚拟机比较容器发展简史传统虚拟机技术容器虚拟化技术docker能干什么带来技术职级的变化开发/运维&#xff08;Devops)新一代开发工程师Docker应用场景why docker&#xff1f;docker的优势docker和dockerHub官网Docker安装CentOS Docker…

10 种 Spring事务失效场景

10 种 Spring事务失效场景 1.概述 Spring针对Java Transaction API (JTA)、JDBC、Hibernate和Java Persistence API(JPA)等事务 API&#xff0c;实现了一致的编程模型&#xff0c;而Spring的声明式事务功能更是提供了极其方便的事务配置方式&#xff0c;配合Spring Boot的自动…

supervisor看守进程

supervisor可以用于看守正在运行的服务&#xff0c;如果服务以外停止&#xff0c;他会在设置的时间间隔内重新启动该服务。 本测试使用的系统是TencentOS3.1. 安装supervisor最简单方法是使用yum。 yum install supervisor supervisor需要python3支持&#xff0c;因此请先确…

【Android玩机】跟大家聊聊面具Magisk的使用(安装、隐藏)

目录:1、Magisk中文网2、隐藏面具和Root&#xff08;一共3种方法&#xff09;1、Magisk中文网 &#xff08;1&#xff09;首先Magisk有一个中文网&#xff0c;对新手非常友好 &#xff08;2&#xff09;这网站里面主要包含&#xff1a;6 部分 &#xff08;3&#xff09;按照他给…

c++常用stl算法

1、头文件 这些算法通常包含在头文件<algorithm> <functional> <numeric>中。 2、常用遍历算法 for_each(v.begin(),v.end(), 元素处理函数/仿函数) 注意&#xff1a;在使用transform转存时&#xff0c;目标容器需要提取开辟合适的空间。 void printfunc(…

【C++】类和对象入门必知

面向过程和面向对象的初步认识类的引入类的定义类的访问限定符封装类的作用域类的实例化类对象模型this指针C语言和C实现Stack的对比面向过程和面向对象的初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解…

【归一化小记】,batchnorm,layernorm,IN,GN,分布式归一化...

BatchNorm 最早在全连接网络中被提出&#xff0c;对每个神经元的输入做归一化。扩展到 CNN 中&#xff0c;就是对每个卷积核的输入做归一化&#xff0c;或者说在 channel 之外的所有维度做归一化。 BN 带来的好处有很多&#xff0c;这里简单列举几个&#xff1a; 防止过拟合&am…

【HTML】HTML 表单 ④ ( textarea 文本域控件 | select 下拉列表控件 )

文章目录一、textarea 文本域控件二、select 下拉列表控件一、textarea 文本域控件 textarea 文本域 控件 是 多行文本输入框 , 标签语法格式如下 : <textarea cols"每行文字字符数" rows"文本行数">多行文本内容 </textarea>实际开发中 并不…

聚观早报 | 嘀嗒出行重启赴港IPO;饿了么到店业务将与高德合并

点击蓝字 / 关注我们今日要闻&#xff1a;嘀嗒出行重启赴港 IPO&#xff1b;饿了么到店业务将与高德合并&#xff1b;美团香港骑手月收入高达3.5万港元&#xff1b;腾讯或引进Meta旗下VR眼镜Quest 2&#xff1b;苹果将阻止用户免费装开测版iOS 17 嘀嗒出行重启赴港 IPO 港交所文…

Java企业开发学习笔记(2)利用组件注解符精简Spring配置文件

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【http://t.csdn.cn/iSeSH】 文章目录一、 利用组件注解符精简Spring配置文件1.1 创建新包1.2 复制四个类1.3 修改杀龙任务类1.4 修改救美任务类1.5 修改勇敢骑士类1.6 修改救美骑士类1.7 创建Spring配置文件1.8 创建…