首页 > 其他分享 >关于cookie跨域

关于cookie跨域

时间:2023-08-29 18:37:29浏览次数:31  
标签:请求 cookie 关于 跨域 操作 我们 页面


第三方cookie和第一方的cookie并不是技术上的区分,而是业务上的区别,我很赞同这句话,因为我觉得第三方和第一方都是一个相对的概念,其实我们操作的都是自己域下的cookie,只是在某种情景下的操作,我们称之为第三方域下cookie的操作                      -------题记

 

注:此处讲的是跨一级域操作cookie,如果只是跨二级域的话,很简单,只需要设置cookie的domian为一级域名,并辅以path属性的设置即可;

 

关于跨域,首先我们要明确一个概念,根据安全策略,我们永远不可能操作第三域的cookie,比如在A域的页面试图去读取一个domian为B域的cookie;或者在域A的页面试图通过域A页面的JS或者来自域A的http请求返回让浏览器去写入一个domain为B域的cookie;

 

到底能不能跨域,跨的是什么域,我觉得这个是我们需要最开始弄清楚的地方,是后面操作一起的基础。因为有些事我们可以努力,有些事我们努力了也不会有结果。

 

cookie的读写场景一般有两种,一般分为前台的JS的操作,和通过http请求传递到后台的读,及http响应的写操作。

 

    前台的JS的读写是受同源策略限制的,我们永远只能将要写的cookie设置和当前载入js的文档为同一个域,就算是通过iframe引入的页面中的JS视图去读写的cookie也是只能和iframe的src是同一个域。

 

    第二种一般发生在页面中包含了另外一个域的请求,比如iframe,img,script都可以。http请求一般都是携带cookie的,这个毋庸置疑,而且只能携带和请求同一个域下的cookie,但是当这个请求发生在另外一个域的页面中的时候,就会产生问题,这个时候对于主页面来说,你在我的页面请求读取不是我域下的cookie,也就是说你想跨域,这个时候他就不会让你这么轻易的得逞,关于这种情况的分析,下面会讲到。如果一个跨域的请求返回了一个写cookie的指令,前提是你写的是和自己请求的域是同一个域的cookie,如果是其他域的,就算和主域是同一个域,想都别想。这个时候你也不是这么容易办到的,因为对于主域来说,你又在想跨我的域来操作,肯定也不是那么容易让你得逞的。

     现在我们先来假设这样一个场景,我们访问一个域A的页面(我们成为A_1页面),A_1页面的底部通过iframe引入一个域B的页面(我们称为B_1页面);

    此时我们关心的是这个发向域B的请求会不会携带域B的cookie和来自域B的响应能不能在导航栏为域A的页面的情况下写入cookie;

    因为对于A页面来说,此时在来自它的window中有一个关于域B的cookie操作请求,此时就发生了我们常说的跨域操作cookie的情况。

    我们首先先拿出结果,在一般情况下,也就是没有服务端p3p的干预的情况下,B_1的请求中是不会携带域B的cookie的,域A的就更别想了。而且B_1的响应中携带的cookie是能够返回的。但是不能写到内存或者硬盘中的。

    但是在火狐中就完全不存在这个问题了,完全可以正常操作。

    对于火狐中不存在这个问题就没有什么好讲的了,IE中不支持的话我们就得分析问题去解决了。

    在这里有一个概念就不得不提了,因为没有这个概念,我们上面谈的问题都不是问题,那就是p3p,关于这个概念,或者称之为协议,我们可以上网了解。它大概可以分为两部分,一部分是浏览器端用户设置的隐私偏好(有这个部分的前提是浏览器支持p3p),和服务端的隐私申明。比如用户可以在IE浏览器中设置隐私级别,默认级别一般都是中。一部分是服务端在头信息关于当前网页隐私安全性的声明;浏览器在最后执行的时候会将隐私安全性的生命和用户设置的做对比,如果不匹配的话,会告知用户,由用户选择安全性的执行方案。

P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"。

 


标签:请求,cookie,关于,跨域,操作,我们,页面
From: https://blog.51cto.com/u_16240770/7278968

相关文章

  • ajax跨域jsonp
    java端代码:/** *AJAX跨域检证用户状态 *@paramrequest *@paramresponse *@throwsIOException */ @RequestMapping("ajaxCheckCross.html") publicvoiddoAjaxCheckCross(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException......
  • 关于Newtonsoft.Json的随笔
    在工作中一些陈旧项目,难免引用了一些很老版本,在一次升级中,项目引用的Newtonsoft.Json.dll突然少了一些method和class1,原来的:(咱也不懂为啥没有版本号嘞 2,升级后的 问题:1,原来使用的函数不存在,但是其实还在,换地方了而已,以下是修改:Newtonsoft.Json.JavaScriptConvert.Seria......
  • 关于DDD中聚合设计的思考(以博客园为例)
    前言聚合作为领域模型中重要的业务功能单元,它的设计是领域建模过程中非常重要的工作。其中聚合根的判断并非一件易事,往往给人一种似是而非的感觉,让人难以捉摸,陷入两难的境地。今天笔者就想以博客园为例来探讨下:博客(Blog)和评论(Comment)究竟是不是一个聚合?问题探讨众所周......
  • 解决iframe跨域
    主项目配置nginxadd_headerOrigin-Agent-Cluster"?0"//chorme116版本开始对iframe跨域更加严格,要加此配置子项目配置nginxadd_headerOrigin-Agent-Cluster"?0"add_headerX-Frame-Options'ALLOW-FROM*.主项目域名1*.主项目域名2*.baidu.com'add_headerConten......
  • 项目中关于QT的常见问题
    一、信号与槽详解QT是一个跨平台的C++GUI应用构架,它提供了丰富的窗口部件集,具有面向对象、易于扩展等特点。信号与槽是QT自行定义的一种对象通信机制,是QT的核心机制。信号与槽实际上是回调函数的一种体现。1、信号当对象改变其状态时,信号就由该对象发射(emit)出去,而且对象只负责......
  • Learn Git in 30 days——第 08 天:关于分支的基本观念与使用方式
    写的非常好的一个Git系列文章,强烈推荐原文链接:https://github.com/doggy8088/Learn-Git-in-30-days/tree/master/zh-cn在Git里面 分支 (Branch)是个非常重要的机制,使用上也必须特别小心,因为项目总不能无限制的「分支」下去,最终总是要合并的,但合并是日后的议题,这篇文章将......
  • 关于Python的学习记录(二十五_yield 关键字和生成器)
    Python中,生成器(Generator)是一种特殊的迭代器,它可以通过函数来创建。生成器函数使用 yield 关键字来产生一个值,并且在每次调用 yield 时暂停执行,保留函数的状态,以便下次调用时可以从上次暂停的地方继续执行。生成器具有以下特点:生成器函数使用def关键字定义,但是它们的执行方......
  • QT连接MySql关于驱动问题
    今天分享一下在qt中连接数据库遇到的一些问题,主要是mysql驱动以及mysql动态库加载1.环境变量配置一下mysql和QT的环境变量,这个比较简单,各位自行百度。2.编译mysql驱动用QT打开mysql.pro文件,在第六行首加上#,然后在末尾加入:win32:LIBS+=-LD:/MySql/mysql-8.1.0-winx64/lib-l......
  • 关于我稀里糊涂的大一生活
    关于我稀里糊涂的大一生活2022年上的大学,距今也已经一年啦,如今大一已经过去,确实是有很多感想想要发表一下。我上的是一所二本院校,学的是人工智能专业,当时也是稀里糊涂的就报了这个专业,但是现在还是应该感谢那时候的自己,确实让我找到了努力的方向。第一次听说老师的工作室是在老......
  • 关于ChatGPT的一些闲扯淡(1)
    这篇写的有点迟了,前者子ChatGPT正火的时候,懒病发作一直拖延。今天对ChatGPT做一个简单的讨论,也是把学习的心得和大家分享一下。首先什么是GPT,英文全称是GenerativePretrainedTransformers(生成式预训练转换器)。GPT是一个预先训练好的,用生成的方式,把输入文字转化成输出文字的转......