当前位置: 首页 > 知识库问答 >
问题:

为交叉源请求设置Cookie

段干靖
2023-03-14

如何分享Cookie交叉起源?更具体地说,如何将set-cookie头与access-control-allow-origin头结合使用?

下面是对我的情况的解释:

我正在尝试为运行在localhost:3000上的web应用程序中的localhost:4000上的API设置cookie。

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

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

此外,当我使用Chrome开发人员工具的Network选项卡检查流量时,我可以在响应cookies下看到cookie。但是,我看不到在storage/cookies下的Application选项卡中设置了cookie。我没有看到任何CORS错误,所以我想我遗漏了一些其他的东西。

有什么建议吗?

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-credentialsaccess-control-allow-headersaccess-control-allow-methodsaccess-control-allow-origin。看看我在Axios的github上发现的问题,我的印象是所有必需的头都已经设置好了。但是,还是没有运气...

共有1个答案

夏俊杰
2023-03-14

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

后端(服务器):将HTTP头access-control-allow-credentials值设置为true。此外,请确保设置了HTTP头access-control-allow-originaccess-control-allow-headers并且没有使用通配符*

2021年Chrome和Firefox更新时推荐的Cookie设置:samesite=nonesecure。请参阅MDN文档

有关在express js中设置CORS的更多信息,请阅读此处的文档

前端(客户端):将XMLHttpRequest.WithCredentials标志设置为True,根据使用的请求-响应库,可以通过不同的方式实现:

>

  • jQuery 1.5.1XHRFields:{WithCredentials:true}

    ES6 fetch()凭据:“include”

    Axios:WithCredentials:true

    如果你不管出于什么原因不回避它。解决办法在上面。

    结果发现,如果域包含端口,Chrome不会设置cookie。为localhost(没有端口)设置它不是问题。非常感谢欧文的这个提示!

  •  类似资料:
    • 我正在尝试一些非常简单的方法,但由于某些原因它不起作用: 启动index.html时出现的错误: 无法加载文件:///e:/dev/eclipse/syrilab/pages/header.html:跨源请求仅支持协议方案:http、data、chrome、chrome-extension、HTTPS。 无法加载文件:///e:/dev/eclipse/syrilab/pages/home.htm

    • 当我试图从返回JSON的Symfony API获取Angular数据时,我目前面临一个错误: “阻止跨源请求:同一源策略不允许读取位于的远程资源。”http://localhost:8000/customers. (原因:缺少CORS标头“访问控制允许原点”。) 以下是完整结果的截图: 我知道这个问题已经被问了很多次,但我找不到一个有效的答案。 当我不尝试在api控制器中检索$session时,它

    • 我在chrome控制台中出现了一个below错误 XMLHttpRequest无法加载XMLHttpRequest无法加载turn:global.turn.twilio.com:3478/turn?username=username&key=key&transport=UDP交叉起源请求仅支持协议方案:http、data、chrome、chrome-extension、HTTPS。 在运行本地we

    • LiteIDE 通过使用环境配置文件来支持 go 语言的交叉编译,对于 windows 和 linux 下相对简单,对于 macOS 可能会复杂一些, 本文以 macOS 交叉编译 windows-386 可执行文件为例,简要介绍如何在 LiteIDE 中配置和实现交叉编译功能。 交叉编译环境选择和配置 首先选择环境,在工具栏环境选择中选择 cross-win32 切换至 windows-386

    • 我的应用程序中有一个特定的请求需要基本身份验证,所以我需要为该请求设置授权头。我读过关于设置HTTP请求头的内容,但据我所知,它将为该方法的所有请求设置该头。我的代码中有这样的内容: 但我不希望我的每一个帖子请求都发送这个标题。有没有办法只为我想要的一个请求发送标题?还是在我提出请求后必须将其移除?

    • 其实思想可以按照从尾开始比较两个链表,如果相交,则从尾开始必然一致,只要从尾开始比较,直至不一致的地方即为交叉点,如图所示 # 使用a,b两个list来模拟链表,可以看出交叉点是 7这个节点 a = [1,2,3,7,9,1,5] b = [4,5,7,9,1,5] for i in range(1,min(len(a),len(b))): if i==1 and (a[-1] != b[-