浏览器跨域请求中携带 Cookie需要同时在前端和后端进行配置

浏览器跨域请求中,要让请求携带 Cookie,需要同时在前端和后端进行配置。以下是实现的方法:

前端配置

在前端代码中使用 fetchAxios 发起请求时,需要设置 credentials 属性:

1. Fetch 示例

fetch('https://example.com/api', {
    method: 'GET', // 或 POST 等其他请求方式
    credentials: 'include', // 表示发送跨域请求时携带 Cookie
    headers: {
        'Content-Type': 'application/json',
    },
});

2. Axios 示例

import axios from 'axios';

axios.defaults.withCredentials = true; // 设置全局默认携带 Cookie
axios.post('https://example.com/api', {
    data: { key: 'value' },
});

后端配置

在后端需要允许跨域请求,并确保 Cookie 能够正常传递。

1. 设置 Access-Control-Allow-Origin

  • 将前端的域名添加到允许的跨域源中。
  • 不允许使用 *,因为携带 Cookie 时要求指定具体域名。

示例(Node.js / Express)

app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', 'https://your-frontend-domain.com'); // 前端域名
    res.header('Access-Control-Allow-Credentials', 'true'); // 允许发送 Cookie
    res.header('Access-Control-Allow-Headers', 'Content-Type'); // 根据需要添加其他头
    next();
});

示例(Spring Boot)

@CrossOrigin(origins = "https://your-frontend-domain.com", allowCredentials = "true")
@RestController
public class MyController {
    // 你的接口逻辑
}

2. 设置 Set-Cookie 响应头

后端需要确保在响应中设置正确的 Set-Cookie,同时指定:

  • SameSite=None(允许跨站携带 Cookie)。
  • Secure(要求在 HTTPS 下传递)。

示例(Express)

res.cookie('myCookie', 'cookieValue', {
    httpOnly: true,
    secure: true, // 必须在 HTTPS 环境下使用
    sameSite: 'None', // 跨站点传递
});

示例(Spring Boot)

ResponseCookie cookie = ResponseCookie.from("myCookie", "cookieValue")
    .httpOnly(true)
    .secure(true)
    .sameSite("None")
    .path("/")
    .build();
response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString());

注意事项

  1. 跨域和 Cookie 安全性
    • 确保前后端都使用 HTTPS。
    • 在生产环境中将 Cookie 设置为 httpOnlysecure
  2. 浏览器限制
    • 检查浏览器是否禁用了第三方 Cookie(现代浏览器可能默认阻止跨站点的 Cookie)。
  3. 调试
    • 使用浏览器的开发者工具查看请求和响应,确保:
      • 请求头中有 Cookie
      • 响应头中包含正确的 Set-Cookie

完成以上配置后,跨域请求应能够正常携带 Cookie

发布者:myrgd,转载请注明出处:https://www.object-c.cn/5158

Like (0)
Previous 2024年12月9日 下午10:27
Next 2024年12月11日 下午7:25

相关推荐

  • 在 Ubuntu 16.04 上使用 GitLab CI 设置持续集成 (CI) 流水线步骤

    在 Ubuntu 16.04 上使用 GitLab CI 设置持续集成 (CI) 流水线需要完成以下步骤。GitLab CI/CD 是一个强大的工具,可以自动化代码测试、构建和部署。 步骤 1:安装 GitLab RunnerGitLab Runner 是用于执行 GitLab CI 流水线任务的工具。安装必要的软件包 添加 GitLab Runner 的官…

    操作系统 2024年12月2日
    00
  • 开源免费的AI智能文字识别产品(OCR识别)

    以下是一些免费和开源的 AI 智能文字识别(OCR)和文档处理工具,可以满足通用文档解析、OCR 识别、格式转换、篡改检测以及证件识别等需求: 1. OCR 识别工具 Tesseract OCR PaddleOCR 2. 文档格式转换工具 Apache PDFBox LibreOffice 3. 篡改检测工具 DocGuard 4. 证件识别工具 EasyO…

    2024年11月26日
    00
  • STM32 的串口(RS485)数据收发通信模式

    STM32 的串口(RS485)数据收发需要使用 RS485 协议,这是一种常用于工业设备和长距离通信的串行通讯标准。RS485 支持半双工通信,即数据可以在同一线路上进行收发。STM32 支持通过 UART 串口来配置 RS485 模式,利用硬件流控制进行数据收发。以下是实现 STM32 与 RS485 数据收发的基本步骤。 1. 硬件连接 RS485 与…

    2024年11月25日
    00
  • 不同版本ffmpeg压缩比差距很大的问题(使用videotoolbox硬编码)

    不同版本的 FFmpeg 在使用 videotoolbox 硬件编码时,压缩比差距较大的问题,通常与以下几个因素相关:1. FFmpeg 硬件编码支持的变化:FFmpeg 集成了多种硬件加速技术(例如在 macOS 上使用 videotoolbox),而随着版本的更新,FFmpeg 可能对硬件编码进行了修复、改进或修改,这些变化可能会导致不同版本之间的压缩效…

    2024年11月27日
    00
  • PHM技术:一维信号时序全特征分析(统计域/频域/时域)信号处理

    PHM(Prognostics and Health Management,预测与健康管理)技术中的一维信号时序特征分析,旨在从信号中提取与设备健康状态相关的多种特征。以下是针对统计域、频域和时域特征分析的详细介绍和常见方法。 1. 时域特征分析时域特征直接从原始信号提取,描述信号的统计特性或时间行为。这些特征反映信号的幅值、变化趋势和波形形状。1.1 常用…

    2024年11月28日
    00
  • 在 CANoe 的 Test Module 中进行压力测试和鲁棒性测试

    在 CANoe 的 Test Module 中进行压力测试和鲁棒性测试,可以通过以下步骤快速构建并执行相关测试: 1. 定义测试目标 首先明确测试的具体内容,例如: 具体的目标可以包括: 2. 配置 CANoe 环境 确保 CANoe 配置已准备好,包含: 3. 创建压力测试脚本 在 Test Module 中使用 CAPL 或 Test Case Edit…

    2024年12月5日
    00
  • 解决 Vue 3 应用部署到 GitHub Pages 后,遇到 404 错误问题

    在将 Vue 3 应用部署到 GitHub Pages 后,遇到 404 错误通常是由于 GitHub Pages 处理路由时的问题。Vue 3 使用 Vue Router 来管理前端路由,而 GitHub Pages 本身是静态托管服务,不支持处理 SPA(单页面应用)的客户端路由。因此,当你直接访问某个页面 URL(比如 https://youruser…

    2024年11月29日
    00
  • Apache DolphinScheduler 一款分布式大数据工作流调度系统

    Apache DolphinScheduler 是一款分布式大数据工作流调度系统。Task 是其核心组件之一,用于定义和调度具体的任务。以下是基于 Apache DolphinScheduler 3.1.9 的 Task 处理流程的解析: 1. Task 提交 在 DolphinScheduler 中,Task 的生命周期通常由用户提交一个具体的任务定义开始…

    2024年12月7日
    00
  • 如何使用uni-app-qrcode插件生成二维码?

    以下是使用uni-app-qrcode插件生成二维码的详细步骤: 安装插件 或者使用yarn进行安装: 引入插件 使用插件生成二维码 上述代码中,首先定义了要编码到二维码中的内容content和生成二维码的配置选项options,然后通过this.$refs.qrcodeCanvas获取页面中的canvas元素,最后调用QRCode.make方法生成二维码。…

    2024年12月22日
    00
  • 云服务器的 宝塔面板 中配置 PHP 支持 WebP 格式的图片

    在云服务器的 宝塔面板 中配置 PHP 支持 WebP 格式的图片,主要是通过安装或启用 GD 库或者 ImageMagick 来实现 WebP 图片的处理支持。下面是一步步的操作方法:1. 确保服务器已经安装 WebP 扩展WebP 格式的支持需要 PHP 依赖于 GD 库或 ImageMagick 库。如果你使用的是 PHP 7.0 及以上版本,通常 G…

    2024年11月29日
    00
  • 使用 Flutter 实现酷炫的粒子动画,可以通过 Shader 来提升效果

    使用 Flutter 实现酷炫的粒子动画,可以通过 Shader 来提升效果。这种方法结合 Flutter 的强大绘图功能和 GLSL 的灵活性,可以创造出高性能且自定义程度极高的视觉效果。以下是实现的基本步骤和核心代码: 核心思想使用 Flutter 的 CustomPainter 绘制粒子。通过 FragmentProgram (GLSL Shader)…

    2024年12月2日
    00
  • 在github上提交PR(Pull Request) + 多个pr同时提交、互不干扰的方法

    在 GitHub 上提交 PR(Pull Request)是一种将代码变更合并到主分支或其他目标分支的常见方式。在同时处理多个 PR 时,需要使用独立的分支来避免相互干扰。以下是详细教程: 步骤一:单个 PR 的提交流程Fork 仓库如果没有直接访问权限,先 fork 原仓库到自己的 GitHub 帐号。在 fork 的仓库上操作自己的代码。克隆仓库到本地 …

    2024年11月26日
    00
  • 在 .NET 环境下,使用 OpenTK 为 SkiaSharp 提供 OpenGL 支持是一个常见的方式

    在 .NET 环境下,使用 OpenTK 为 SkiaSharp 提供 OpenGL 支持是一个常见的方式,可以高效地进行 2D 图形渲染。下面是具体如何实现和一些关键概念的介绍: 背景知识 实现步骤 1. 添加必要的 NuGet 包 确保你的项目安装了以下 NuGet 包: 2. 创建 OpenGL 上下文 使用 OpenTK 创建一个 OpenGL 上下…

    2024年12月8日
    00
  • Web实时通信和 @microsoft/signalr 微软开发的一款基于 SignalR 的实时通信库

    Web实时通信和 @microsoft/signalr@microsoft/signalr 是微软开发的一款基于 SignalR 的实时通信库,专为 Web 应用提供强大的实时通信功能。SignalR 的主要特点包括支持双向通信、自动选择传输协议(WebSockets、Server-Sent Events 或 Long Polling)以及简化的服务器与客户…

    2024年12月1日
    00
  • 在 Jupyter Notebook 中使用 Markdown 的相关技巧

    在 Jupyter Notebook 中使用 Markdown 是一种常见的方式来撰写文档和注释,增强数据分析和报告的可读性。Markdown 在 Jupyter Notebook 中不仅支持标准的文本格式化功能,还提供了许多扩展功能,比如数学公式、表格、代码块等。以下是一些常用的 Markdown 技巧,可以帮助你提升 Jupyter Notebook 中…

    2024年11月27日
    00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信