cookie的规范Cookie的不可跨域名性或Cookie与域名的关系

本文详细探讨了在web开发中遇到的Cookie跨域问题,通过一个具体的购物车项目案例,阐述了不同域名和端口下Cookie的行为差异,以及如何解决跨域导致的数据获取问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前些天在开发中遇到了关于浏览器cookie的一些小细节问题。

例如: 我创建的一个小购物车的web项目。
用nginx绑定域名 cart.test.com,对应ip为localhost:8888。

具体问题: 使用地址栏访问:cart.test.com/cart/addItemToCartList?itemId=123 (此为添加购物车数据方法)时,返回的结果为成功,存储过程没有问题。
但是,我使用localhost:8888/cart/findCartList(此为查询购物车数据方法)获取的数据却是空数组:[]。然而,如果换成 cart.test.com/cart/findCartList 访问该方法时却可以拿到数据。
解决思路:通过debug发现我使用 cart.test.com/cart/findCartList 和localhost:8888/cart/findCartList 访问同一方法时,所产生的cookie是不一样的。

答案:百度得知
cart.test.com/cart/findCartList
localhost:8888/cart/findCartList
域名和域名对应相同ip
这种情况属于跨域场景。又因为,Cookie具有不可跨域名性。所以无法获取同样的数据。
解决方案:初步定为统一访问方式
参考如下:

*常见跨域场景
URL 说明 是否允许通信
http://www.domain.com/a.js
http://www.domain.com/b.js 同一域名,不同文件或路径 允许
http://www.domain.com/lab/c.js
http://www.domain.com:8000/a.js
http://www.domain.com/b.js 同一域名,不同端口 不允许

http://www.domain.com/a.js
https://www.domain.com/b.js 同一域名,不同协议 不允许

http://www.domain.com/a.js
http://192.168.4.12/b.js 域名和域名对应相同ip 不允许**

http://www.domain.com/a.js
http://x.domain.com/b.js 主域相同,子域不同 不允许
http://domain.com/c.js

http://www.domain1.com/a.js
http://www.domain2.com/b.js 不同域名 不允许*

最后说一下cookie的相关知识点:
Cookie的不可跨域名性
很多网站都会使用Cookie。例如,Google会向客户端颁发Cookie,Baidu也会向客户端颁发Cookie。那浏览器访问Google会不会也携带上Baidu颁发的Cookie呢?或者Google能不能修改Baidu颁发的Cookie呢?

答案是否定的。Cookie具有不可跨域名性。根据Cookie规范,浏览器访问Google只会携带Google的Cookie,而不会携带Baidu的Cookie。Google也只能操作Google的Cookie,而不能操作Baidu的Cookie。

Cookie在客户端是由浏览器来管理的。浏览器能够保证Google只会操作Google的Cookie而不会操作Baidu的Cookie,从而保证用户的隐私安全。浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。Google与Baidu的域名不一样,因此Google不能操作Baidu的Cookie。

需要注意的是,虽然网站images.google.com与网站www.google.com同属于Google,但是域名不一样,二者同样不能互相操作彼此的Cookie。

### Cookie不可跨域机制及其工作原理 #### 什么是 CookieCookie 是一种存储在客户端的小型数据片段,通常由服务器生成并发送给浏览器。当浏览器再次向同一服务器发起请求时,会自动将这些 Cookie 数据随请求一起发送回去。 #### Cookie不可跨域特 为了保护用户的隐私和安全,浏览器实现了严格的同源策略(Same-Origin Policy),其中就包括对 Cookie 的管理规则。具体来说: - **同源定义**:两个 URL 被认为是同源的,如果它们具有相同的协议、主机名和端口号。 - **不可跨域原则**:浏览器只会将某个域名下的 Cookie 发送到其匹配的目标站点上[^1]。这意味着 A 网站无法读取写入 B 网站的 Cookie。 #### 工作原理详解 以下是 Cookie 不可跨域特的主要工作机制: 1. **设置 Domain 属** 当服务器创建一个 Cookie 并将其返回到客户端时,可以通过 `setDomain` 方法指定Cookie 所属的有效域名范围。例如,在 Java 中可以这样操作: ```java cookie.setDomain(".b.com"); ``` 这表示 `.b.com` 及其子域名都可以共享此 Cookie。 2. **路径 Path 控制** 此外还可以通过设定 `Path` 来进一步限定哪些页面能够访问特定的 Cookie。比如 `/admin/*` 页面可能拥有独立于其他部分的功能所需的不同 Cookies 设置。 3. **Secure 和 HttpOnly 标志位的作用** - 如果设置了 `Secure` 参数,则只有 HTTPS 协议下才会传输这个 Cookie; - 使用 `HttpOnly` 后 JavaScript 就不能再直接获取者修改它了,从而减少 XSS 攻击风险[^3]。 4. **SameSite 属的影响** Modern browsers introduced the `SameSite` attribute to restrict how cookies are sent with cross-origin requests. - Setting it as `Strict`, no cookies will be attached when making third-party calls; - Choosing `Lax` allows some GET operations while still preventing others like POST submissions across different origins unless explicitly allowed via CORS headers such as Access-Control-Allow-Credentials set true alongside appropriate Origin values being accepted by server side logic.[^3] #### 实际案例分析——B站 & 优快云 示例说明 ##### 案例一:Bilibili (假设场景) 假如你在 bilibili 登录成功之后跳转到了合作方网站 dianying.bilibili.com ,此时虽然两者都属于同一个顶级域名体系之下(`*.bilibili.com`)但由于存在不同的二级甚至三级子域所以需要特别处理才能让登录状态得以延续: ```javascript // Vue.js 配置 Axios 请求携带凭证 import axios from 'axios'; axios.defaults.withCredentials = true; // Server-side code snippet in PHP ensuring proper header settings for allowing credentials sharing between domains under certain conditions only after verifying incoming request's origin matches expected whitelist entries beforehand... header('Access-Control-Allow-Origin: https://www.bilibili.com'); header('Access-Control-Allow-Credentials: true'); ``` 上述代码展示了如何利用现代 Web 技术克服传统意义上的“完全隔离”的局限同时又不失安全考虑[^2]. ##### 案例二:优快云 Blog Post Example Another illustrative example comes directly out of an actual blog post written specifically addressing similar concerns regarding maintaining session continuity over multiple subdomains within a single parent domain structure without compromising overall system integrity too much either programmatically or architecturally speaking... Here we see another practical demonstration involving both client-side adjustments made possible thanks largely due recent advancements brought forth through widespread adoption standards-based approaches combined together along best practices recommendations designed keep things running smoothly even amidst increasingly complex interconnected environments today’s digital landscape presents us daily basis regularly encounter during normal course business activities conducted online virtually everywhere around world wide web constantly evolving ever-changing fast pace manner indeed! --- ### 总结 综上所述,Cookies 的设计初衷即包含了防止恶意程序滥用个人信息的重要考量因素在里面,因此才会有如此严格的规定来约束它的行为表现形式等方面内容涉及到方方面面细节之处都需要格外留意才行哦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值