• Cookie 能跨域吗?如何设置?


    结论先行:

    在一般情况下,Cookie 是不允许跨域的。但是可以通过设置实现跨域。

    首先,在服务端设置响应头:

    Access-Control-Allow-Credentials: true将“允许跨域请求携带认证信息”的值设为true

    Access-Control-Allow-Origin: 请求域名配置允许访问的域名

    接着,在客户端也要设置 withCredentials 使其允许 Cookie 共享,就可以实现 Cookie 的跨域访问了。

    具体解析: 

    在同一域名下,不同页面之间可以共享 Cookie;而在不同域名下,默认情况下是不能共享 Cookie 的。

    HTTP Cookie 通常是与特定域相关联的。因此在一般情况下,Cookie 是不允许跨域的。

    但是通过合适的设置,可以使得某些情况下的跨域请求携带 Cookie。

    同源策略:默认情况下,浏览器遵循同源策略,不允许跨域请求携带 Cookie。

    即在发送跨域请求时,浏览器不会发送相应域的 Cookie 到服务器端。这是为了防止恶意网站获取用户在其他网站的信息。但是在一些特殊情况下,我们可能需要跨域携带 Cookie。

    设置 Cookie 并允许跨域访问可以这样实现:

    ① 服务端设置响应头:

    Access-Control-Allow-Credentials: true(访问控制允许凭据)

    表示允许跨域请求携带认证信息(包括Cookie)

    Access-Control-Allow-Origin: 请求域名(访问控制允许源)

    指定允许访问的域名。表示允许该域名下的请求访问资源,而不仅仅是同一域名下的请求。

    Credentials  证书;凭证  /krəˈdenʃlz/

    1. Access-Control-Allow-Origin: http://www.example.com
    2. Access-Control-Allow-Credentials: true

    在客户端请求中设置 withCredentials

    前端请求中需要设置 credentials: include 表示允许发送 Cookie,需要与响应头中的 Access-Control-Allow-Credentials 配合使用。 

    对于跨域请求,在客户端需要明确指定携带 Cookie,可以通过 XMLHttpRequest 对象或 Fetch API 的 credentials 属性进行设置。

    1. fetch('http://api.example.com/data', {
    2. credentials: 'include',
    3. headers: {
    4. 'Content-Type': 'application/json'
    5. }
    6. })

    在以上代码中,fetch 请求中的 credentials 设置为 include,并且响应头中设置 Access-Control-Allow-Credentials 为 true,就可以实现 Cookie 的跨域访问。

    需要注意的是,跨域设置 Cookie 只能在响应中设置,而不能在请求中设置。

  • 相关阅读:
    【OpenVINO】行人摔倒检测 — 基于 OpenVINO C# API 部署PP-Human-上篇
    Mac用NTFS文件夹读写NTFS硬盘 NTFS能复制多大的文件
    【PAT甲级 - C++题解】1059 Prime Factors
    linux 安装rar工具
    vs2017/2019串口Qt Serial Port/modbus使用报错
    有趣的USB接口和颜色分类
    web学习---JavaScript---笔记(二)
    mybatis-3.5.0使用插件拦截sql以及通用字段赋值
    C++信号量机制
    Spring Boot - 用JUnit 5构建完美的Spring Boot测试套件
  • 原文地址:https://blog.csdn.net/qq_38290251/article/details/134321697