热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

真正“搞”懂HTTP协议09之这个饼干不能吃

原标题:真正“搞”懂HTTP协议09之这个饼干不能吃我们在之前的文章中介绍HTTP特性的时候聊过,HTTP是无状态的,每次聊起HTTP特性的时候,我都会回忆一下从前辉煌的日子,

原标题:真正“搞”懂HTTP协议09之这个饼干不能吃

  我们在之前的文章中介绍HTTP特性的时候聊过,HTTP是无状态的,每次聊起HTTP特性的时候,我都会回忆一下从前辉煌的日子,也就是互联网变革的初期,那时候其实HTTP不需要有状态,就是个浏览页面,没有什么需要记录信息的地方,所以无状态完全符合当时的场景。

  另外,无状态也给HTTP带来了不少的好处,正是因为无状态,这样服务器就没有状态差异,就可以很轻易的组成集群,当然,缺点就是无法支持需要记录状态的事务。为了解决这个缺点,COOKIE就出现了。

一、这个饼干是什么?

  COOKIE的核心作用,其实就是让HTTP拥文章来源地址58186.html有记忆的能力,虽然服务器记不住,但是服务器可以根据HTTP提供的信息来做出相应的逻辑和判断。你大概可以这样理解,相当于服务器给每一个客户端都贴上了一个小纸条,当服务器把纸条设置好后,会发送给客户端,客文章来源站点https://www.yii666.com/户端每次传输HTTP数据的时候,就会把这个小纸条带上发给服务器,服务器就可以见人下菜碟了。

二、小饼干是怎么工作的?

  关于COOKIE的相关规范,并不在RFC2616或者RFC7230中,而是在RFC6265中,这份规范针对COOKIE做了独立、详细的介绍。

  COOKIE的工作过程主要应用到了两个字段:响应头字段Set-COOKIE和请求头字段COOKIE

  当客户端像服务器第一次请求资源的时候,服务器会使用Set-COOKIE来给客户端贴上一个标签,格式就是“key=value”这样,随着响应报文一起发送给浏览器。这样浏览器在下一次发送请求的时候会自动带上COOKIE数据,服务器发现欸?这次请求有COOKIE,就知道不是首次请求,然后识别COOKIE,为该用户提供个性化的服务。

  当然,我们还可以使用多个Set-COOKIE字段,来设置多个数据,让客户端携带更多的有用的信息。

  要注意的是,COOKIE与操作系统无关,是浏览器绑定的,当你换了浏览器,实际上相当于一个新的初次请求。

三、COOKIE的属性

  我们现在知道了,COOKIE其实就是服务器委托客户端存储的一些数据,通常这些数据都是用来记录用户的关键信息。那么就需要一些额外的手段来保证COOKIE的安全,这些手段就是COOKIE的属性。我们下面就来看一下这些常用的有关于COOKIE的属性有哪些。

  首先,我们可以通过ExpiresMax-Age设置COOKIE的有效期,“Expires”俗称“过期时间”,用的是绝对时间点,可以理解为“截止日期”(deadline)。“Max-Age”用的是相对时间,单位是秒,浏览器用收到报文的时间点再加上 Max-Age,就可以得到失效的绝对时间。这两者可以同时出现,两者的失效时间可以一致,也可以不一致,但浏览器会优先采用 Max-Age 计算失效期

  其次,我们还可以设置COOKIE的作用域,“Domain”和“Path”指定了 COOKIE 所属的域名和路径,浏览器在发送 COOKIE 前会从 URI 中提取出 host 和 path 部分,对比 COOKIE 的属性。如果不满足条件,就不会在请求头里发送 COOKIE。

  使用这两个属性可以为不同的域名和路径分别设置不同的COOKIE,比如/a用一个COOKIE,/b用另外一个COOKIE,当然通常都是一个“/”就完事了。

  最后,我们要考虑的就是COOKIE的安全性了,前端的同学们肯定知道,COOKIE可以通过document.COOKIE获取,这样就导致了安全隐患,可能会导致XSS也就是跨站脚本攻击,从而窃取数据。HttpOnly属性就会告诉浏览器,此COOKIE只能通过浏览器传输,禁止其它方式的访问,浏览器就会禁止任何API对COOKIE的访问,从而避免了XSS攻击。

  再有,SameSite属性可以防范“跨站请求伪造”(XSRF)攻击,设置成“SameSite=Strict”可以严格限定 COOKIE 不能随着跳转链接跨站发送,而“SameSite=Lax”则略宽松一点,允许 GET/HEAD 等安全方法,但禁止 POST 跨站发送。

  还有一个属性叫“Secure”,表示这个 COOKIE 仅能用 HTTPS 协议加密传输,明文的 HTTP 协议会禁止发送。但 COOKIE 本身不是加密的,浏览器里还是以明文的形式存在。

www.yii666.com、COOKIE的应用场景

  其实COOKIE最常见的应用场景就是身份识别,保存用户的登录信息,实现会话事务。

  另一个常见的场景就是广告追踪,你上网的时候肯定看过很多的广告图片,这些图片背后都是广告商网站(例如 Google),它会“偷偷地”给你贴上 COOKIE 小纸条,这样你上其他的网站,别的广告就能用 COOKIE 读出你的身份,然后做行为分析,再推给你广告。这种 COOKIE 不是由访问的主站存储的,所以又叫“第三方 COOKIE”(third-party COOKIE)。如果广告商势力很大,广告到处都是,那么就比较“恐怖”了,无论你走到哪里它都会通过 COOKIE 认出你来,实现广告“精准打击”。为了防止滥用 COOKIE 搜集用户隐私,互联网组织相继提出了 DNT(Do Not Track)和 P3P(Platform for Privacy Preferences Project),但实际作用不大

五、例子

  我们先来看看简单的COOKIE设置。代码也很简单:

res.setHeader("Set-COOKIE", ["age=13", "name=zaking"]);

  注意,如果你要设置多个COOKIE的话,第二个参数要是个数组,我们看下效果:

  这是第一次请求,然后我们刷新下页面:

  你就能看到请求头中带上了COOKIE,我们还可以给每个COOKIE设置它的作用域和失效时间:

res.setHeader("Set-COOKIE", [
"age=13; path=/; max-age=5",
"name=zaking; path=/set-COOKIE; max-age=10",
"hide=true; path=/else; max-age=1000",
]);

  记得实验效果之前把上一次的COOKIE清空噢。然后我们看上面的代码,path限制了路径,所以当我们访问/set-COOKIE的页面的时候,其实只会有两个COOKIE,一个有效时间5秒,一个10秒。大家可以自己试下哦:

  过了这个时间之后,你会发现一个COOKIE都没有了。COOKIE的属性中还有一个限制作用域的属性,叫做Domain,这个我就不试了,大家可以自行尝试一下噢。接下来我们看下,我们在页面中通过document.COOKIE来获取COOKIE:


COOKIE


  就这么简单,重启服务刷新页面后,可以看到控制台打印出了作用域范围内的COOKIE。

  我们加个HttpOnly再看看:

res.setHeader("Set-COOKIE", [
"age=13; path=/; max-age=5",
"name=zaking; path=/set-COOKIE; max-age=10;HttpOnly",
"hide=true; path=/else; max-age=1000",
]);

  结果就只剩下age了,完全符合我们的预期。

  那么例子就到这里啦,还有一些我没写出来噢,比如SameSite和Secure。其实也并不复杂,我就是懒得写了。

六、总结

  C文章来源地址58186.htmlookie其实是有大名的,叫www.yii666.com做Magic COOKIE,意思是不透明的数据,跟饼干没啥关系噢。早期的COOKIE都是存在磁盘上的文本文件,现在基本上是使用数据库存储,比如sqlite,存储的大小有一定的限制,是4k。

  如果不指定COOKIE生效实践,则会在浏览器关闭后无效,也叫做会话COOKIE。历史上还有Set-COOKIE2和COOKIE2这样的字段,但是现在没用了。



<body>

COOKIE


body>


<script>


console.log(document.COOKIE);


script>

来源于:真正“搞”懂HTTP协议09之这个饼干不能吃


推荐阅读
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • 2月4日每日安全热点节日期间某企远程办公遭XRed攻击 ... [详细]
  • 智商狂飙,问了ChatGPT几个数据库问题后,我的眼镜掉了
    原标题:智商狂飙,问了ChatGPT几个数据库问题后,我的眼镜掉了最近,ChatGPT火爆全网,介绍其产品、公司、作者、技术和应用等方面信息,占据着整个互联网,似乎不谈GPT好像 ... [详细]
  • XSS 漏洞绕过
    Web安全攻防学习笔记 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 【工具篇】抓包中的王牌工具—Fiddler (1环境搭建)
    本文介绍了抓包工具Fiddler的概述,包括其功能、选择原因和安装方法。Fiddler是一款免费且功能强大的抓包工具,可用于网络代理、接口测试、安全测试和WEB调试等。安装配置简单,上手快速,适合新手使用。详细的安装地址为https://www.telerik.com/download/fiddl。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • 生产环境下JVM调优参数的设置实例
     正文前先来一波福利推荐: 福利一:百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。福利二 ... [详细]
  • JVM(三)虚拟机栈 多合一总述
    虚拟机栈概述虚拟机栈出现背景:由于跨平台性的设计,Java的指令都是根据栈来设计的。不同CPU架构不同,所以不能设计为基于寄存器的跨平台的优点:指令集小,编译器容易实现,缺点是性能 ... [详细]
  • clickhouse 二(springboot+mybatis配置clickhouse,实现插入查询)
    原标题:clickhouse二(springboot+mybatis配置clickhouse,实现插入查询)开发步骤 ... [详细]
  • 直击热门考点——结构体内存对齐
    原标题:直击热门考点——结构体内存对齐文章目录前言一、引例 ... [详细]
  • 20210921c++ 继承,虚继承(内存结构)
    原标题:2021-09-21c++继承,虚继承(内存结构)普通的公有继承 ... [详细]
  • node.js 全局变量说明
    原标题:node.js全局变量说明文章目录全局对象 ... [详细]
author-avatar
陈雅杰昱宏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有