如何分享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-credentials
、access-control-allow-headers
、access-control-allow-methods
和access-control-allow-origin
。看看我在Axios的github上发现的问题,我的印象是所有必需的头都已经设置好了。但是,还是没有运气...
要允许通过CORS请求成功接收和发送cookie,请执行以下操作。
后端(服务器):将HTTP头access-control-allow-credentials
值设置为true
。此外,请确保设置了HTTP头access-control-allow-origin
和access-control-allow-headers
并且没有使用通配符*
。
2021年Chrome和Firefox更新时推荐的Cookie设置:samesite=none
和secure
。请参阅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[-