为跨源请求设置cookie

2023-11-27

如何跨域共享cookies?更具体地说,如何使用Set-Cookie标题与标题相结合Access-Control-Allow-Origin?

这是我的情况的解释:

我正在尝试为正在运行的 API 设置 cookielocalhost:4000在托管于的网络应用程序中localhost:3000.

我似乎在浏览器中收到了正确的响应标头,但不幸的是它们没有效果。这些是响应标头:



HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://localhost:3000
Vary: Origin, Accept-Encoding
Set-Cookie: token=0d522ba17e130d6d19eb9c25b7ac58387b798639f81ffe75bd449afbc3cc715d6b038e426adeac3316f0511dc7fae3f7; Max-Age=86400; Domain=localhost:4000; Path=/; Expires=Tue, 19 Sep 2017 21:11:36 GMT; HttpOnly
Content-Type: application/json; charset=utf-8
Content-Length: 180
ETag: W/"b4-VNrmF4xNeHGeLrGehNZTQNwAaUQ"
Date: Mon, 18 Sep 2017 21:11:36 GMT
Connection: keep-alive
  

此外,我可以看到下面的cookieResponse Cookies当我使用 Chrome 开发者工具的“网络”选项卡检查流量时。然而,我看不到在“应用程序”选项卡中设置的 cookieStorage/Cookies。我没有看到任何 CORS 错误,所以我认为我还遗漏了其他内容。

有什么建议么?

更新一:

我正在使用requestReact-Redux 应用程序中的模块向/signin服务器上的端点。对于服务器我使用express。

快递服务器:



res.cookie('token', 'xxx-xxx-xxx', { maxAge: 86400000, httpOnly: true, domain: 'localhost:3000' })
  

在浏览器中请求:



request.post({ uri: '/signin', json: { userName: 'userOne', password: '123456'}}, (err, response, body) => {
    // doing stuff
})  

更新二:

我现在疯狂地设置请求和响应标头,确保它们都出现在请求和响应中。下面是一个屏幕截图。注意标题Access-Control-Allow-Credentials, Access-Control-Allow-Headers, Access-Control-Allow-Methods and Access-Control-Allow-Origin。看看我发现的问题axios 的 github,我的印象是所有必需的标头现在都已设置。然而,还是没有运气……

enter image description here


跨站点方法

要允许通过 CORS 请求成功接收和发送 cookie,请执行以下操作。

后端(服务器)HTTP 标头设置:

  • 设置 HTTP 标头Access-Control-Allow-Credentials价值true.

  • 确保 HTTP 标头Access-Control-Allow-Origin and Access-Control-Allow-Headers已设置。不要使用通配符*。当您设置允许的来源时,请确保使用包括方案在内的整个来源,即 http 与 CORS 中的 https 不同。

有关在 Express js 中设置 CORS 的更多信息阅读此处的文档.

Cookie 设置:2021 年 Chrome 和 Firefox 更新的 Cookie 设置:

  • SameSite=None
  • Secure

做的时候SameSite=None, 环境Secure是一个要求。请参阅文档SameSite并根据要求Secure。另请注意,Chrome 开发工具现在改进了“网络”选项卡和“应用程序”选项卡中 cookie 问题的过滤和突出显示。

前端(客户端):设置XMLHttpRequest.withCredentials标记为true,这可以通过不同的方式实现,具体取决于所使用的请求响应库:

  • ES6 获取()这是 HTTP 的首选方法。使用credentials: 'include'.

  • jQuery 1.5.1出于遗留目的而提及。使用xhrFields: { withCredentials: true }.

  • axios作为流行的 NPM 库的示例。使用withCredentials: true.

代理方法

完全避免必须执行跨站点 (CORS) 的操作。您可以通过代理来实现此目的。只需将所有流量发送到同一顶级域名并使用 DNS(子域)和/或负载平衡进行路由。对于 Nginx,这相对来说是比较省力的事情。

这种方法与 JAMStack 完美结合。 JAMStack 要求 API 和 Webapp 代码在设计上完全解耦。越来越多的用户阻止第 3 方 cookie。如果 API 和 Web 应用程序可以轻松地在同一主机上提供服务,则第 3 方问题(跨站点/CORS)就会消失。了解 JAMStackhere or here.

Sidenote

事实证明,如果域包含端口,Chrome 将不会设置 cookie。将其设置为localhost(没有端口)不是问题。非常感谢Erwin对于这个提示!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为跨源请求设置cookie 的相关文章

随机推荐

  • PDFSharp:使用自动换行测量长文本的高度

    PDFSharp 在绘制长文本部分时支持自动文本换行 textFormatter DrawString text font XBrushes Black new XRect x y textAreaWidth 1000 XStringFor
  • 如何在列标题中使用希腊字母在 rmarkdown 中创建表格?

    我正在尝试在 rmarkdown 中创建一个表kable and kableExtra我想把希腊字母放在add header above功能 kable a format latex booktabs T longtable T gt ka
  • 更改多个 Python 实例中的变量

    是否可以同时设置类的所有实例的变量 我有一个简化的例子如下 class Object def init self self speed 0 instance0 Object instance1 Object instance2 Object
  • CSS 有类似 jQuery 的 :has() 的东西吗?

    在CSS 任何版本 中 是否有类似的东西 或者任何其他方式来做类似的事情 has jQuery 中的选择器 jQuery has selector 描述 选择元素 至少包含一个元素 匹配指定的选择器 http api jquery com
  • 如何向使用 ggplot2 创建的分区统计图添加标签?

    我正在尝试向我在 ggplot2 中创建的分区统计图添加文本注释 但目前失败 我正在寻求用名称标记每个多边形 地方政府区域 在我继续之前 我知道有人在 SO 上提出了类似的问题 并在 非常好的 教程中详细介绍了这一问题here 但是 我尝试
  • 将子目录(已重命名!)分离到新的存储库中

    我有一个存储库 我想将其目录之一分离到一个新的存储库中 This是一个完美的起点 但是有一个警告 我想要分离的目录在某个时候被重命名 如果我按照该帖子中的解决方案使用目录的新名称 那么我似乎会丢失重命名之前的历史记录 有什么想法可以调整以使
  • 在任意 scala 代码位置期间放入解释器

    我有 Python 背景 我可以在代码中的任何位置添加 import pdb pdb set trace 在运行时 我将在该位置进入交互式解释器 scala 是否有等效的 或者这在运行时不可能 是的 在 Scala 2 8 上可以 请注意
  • 用于数组元素的 LIKE 查询的 LINQ

    假设我有一个数组 我想对 varchar 执行 LINQ 查询 返回在 varchar 中任何位置具有数组元素的任何记录 这样的事情会很甜蜜 string industries airline railroad var query 来自联系
  • 一起使用 SQL LIKE 和 IN

    有没有办法同时使用LIKE和IN 我想实现这样的目标 SELECT FROM tablename WHERE column IN M510 M615 M515 M612 所以基本上我希望能够将列与一堆不同的字符串相匹配 是否有另一种方法可以
  • OS X 的默认命令如何访问沙盒应用程序的首选项?

    我正在编写一个首选项编辑器工具 请参阅http www tempel org PrefsEditor 它实际上是 GUI 版本defaults命令 不过 我在读取 更不用说编写 随机沙盒应用程序的偏好时遇到了困难 例如 当我尝试获取地图应用
  • Apache POI 5 和 XMLBeans 类路径问题

    我尝试在下面的帖子中回答 但我没有 声誉 也确实没有时间去寻找 10 个问题来回答 运行时异常 POI 5 和 xmlbeans 对于 WebLogic 服务器中的 POI 5 和 XMLBeans 4 或 5 存在类加载器问题 它将尝试使
  • 在 Oracle DB 中将 pandas(字符串/对象)列保存为 VARCHAR 而不是 CLOB(默认行为)

    我正在尝试将数据帧传输到 Oracle 数据库 但传输时间太长 因为变量的数据类型显示为clob在甲骨文中 但是我相信如果我将数据类型转换为clob到字符串9 digits with 填充0 不会花那么多时间 数据是 product 000
  • 我们什么时候应该将 .then 与 Protractor Promise 一起使用?

    我对量角器有很多不稳定的地方 我确信有些东西我不明白 有时我需要在继续之前单击按钮时使用 then 有时它没有任何影响 我不应该使用 then 或测试失败 我想知道在 Protractor 中测试时何时应该使用 then 回调 例子 cre
  • 树枝中“do”标签的用途是什么

    我看过关于树枝的文档do标签 但我不明白它的用途 有用 The docs说如下 do 标签的工作方式与正则变量表达式 只是它不打印任何内容 并展示一个例子 do 1 2 这个标签到底要解决什么 好问题 我发现GitHub 上的链接 指向何时
  • F# 删除函数处理程序

    因此 我有一个想要在事件触发器上执行的函数 但我想稍后将其删除 我为此做什么 我知道 F 事件有Add添加函数作为处理程序的方法 但您无法删除此函数 我明白 但我根本找不到如何创建任何委托 嗯 有is the type Foo delega
  • 如何在 Eclipse 中升级到 GWT 2.5

    我正在使用 GWT 2 4 和 Eclipse Juno GWT 是按照以下说明安装的https developers google com web toolkit usingeclipse 我想尝试 GWT 2 5 如何从 GWT 2 4
  • 架构armv7的未定义符号:cocoaPods iPhone 5

    仅当我尝试在 iPhone 5 上构建和运行时 我才会收到此错误 它在 iPhone 6 或更高版本上运行良好 这些都是产生错误的 cocoaPods 我已经运行了 pod install pod update 清除了 pod 并重新开始
  • cURL 中的数据二进制参数

    我必须通过 php 中的 cURL 发送数据二进制参数 这是命令 curl D u user password X PUT H Content Type text plain data binary data id 2010 10 01 1
  • Java 8 DateTimeFormatter 与可选部分

    我有一个代表日期 有或没有时间 的字符串 例如13 12 2017 or 13 12 2017 15 39 51 所以我尝试将 java 8 DateTimeFormatter 与可选部分一起使用 该代码有效 LocalDateTime l
  • 为跨源请求设置cookie

    如何跨域共享cookies 更具体地说 如何使用Set Cookie标题与标题相结合Access Control Allow Origin 这是我的情况的解释 我正在尝试为正在运行的 API 设置 cookielocalhost 4000在