【发布时间】:2018-02-27 12:43:57
【问题描述】:
如何跨域共享cookies?更具体地说,如何将Set-Cookie 标头与Access-Control-Allow-Origin 标头结合使用?
下面是我的情况的解释:
我正在尝试在localhost:3000 上托管的网络应用程序中为localhost:4000 上运行的 API 设置 cookie。
似乎我在浏览器中收到了正确的响应标头,但不幸的是它们没有效果。这些是响应标头:
HTTP/1.1 200 正常 访问控制允许来源:http://localhost:3000 变化:来源,接受编码 设置 Cookie:令牌=0d522ba17e130d6d19eb9c25b7ac58387b798639f81ffe75bd449afbc3cc715d6b038e426adeac3316f0511dc7fae3f7;最大年龄=86400;域=本地主机:4000;路径=/;过期=格林威治标准时间 2017 年 9 月 19 日星期二 21:11:36; HttpOnly 内容类型:应用程序/json;字符集=utf-8 内容长度:180 ETag:W/“b4-VNrmF4xNeHGeLrGehNZTQNwAaUQ” 日期:2017 年 9 月 18 日星期一 21:11:36 GMT 连接:保持活动此外,当我使用 Chrome 开发人员工具的“网络”选项卡检查流量时,我可以在 Response Cookies 下看到 cookie。但是,我看不到在Storage/Cookies 下的“应用程序”选项卡中设置了cookie。我没有看到任何 CORS 错误,所以我认为我遗漏了其他内容。
有什么建议吗?
更新一:
我在 React-Redux 应用程序中使用 request 模块向服务器上的 /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) => { // 做事 })更新二:
我现在疯狂地设置请求和响应标头,确保它们同时出现在请求和响应中。下面是一个截图。注意标题Access-Control-Allow-Credentials、Access-Control-Allow-Headers、Access-Control-Allow-Methods 和Access-Control-Allow-Origin。查看我在Axios's github 发现的问题,我的印象是所有必需的标头现在都已设置。然而,仍然没有运气......
【问题讨论】:
-
@PimHeijden 看看这个:developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/… 也许你需要使用 withCredentials ?
-
好的,你正在使用请求,我认为这不是最好的选择,看看这篇文章和答案,我认为 axios 可能对你有用。 stackoverflow.com/questions/39794895/…
-
谢谢!我没有注意到
request模块不适用于浏览器。到目前为止,Axios 似乎做得很好。我现在收到两个标题:Access-Control-Allow-Credentials:true和Access-Control-Allow-Origin:http://localhost:3000(用于启用 CORS)。这似乎是正确的,但Set-Cookie标头没有做任何事情...... -
同样的问题,但直接使用 Axios :stackoverflow.com/q/43002444/488666。虽然 Axios 端确实需要
{ withCredentials: true },但服务器标头也必须仔细检查(参见 stackoverflow.com/a/48231372/488666) -
什么服务器头文件?
标签: authentication cookies cors http-headers localhost