如何跨起源共享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开发工具的网络选项卡检查流量时,我可以在响应cookie下看到cookie。然而,我不能看到一个cookie被设置在应用程序选项卡下的存储/ cookie。我没有看到任何CORS错误,所以我假设我还遗漏了其他东西。
有什么建议吗?
我更新:
我正在使用React-Redux应用程序中的请求模块向服务器上的/signin端点发出请求。对于服务器,我使用express。
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和Access-Control-Allow-Origin。看看我在Axios的github上发现的问题,我的印象是所有必需的标题现在都设置好了。然而,还是没有运气……