【发布时间】:2017-04-07 00:31:12
【问题描述】:
我们正面临一个关于 cookie 的奇怪问题。服务器从https://product.example.com/rest/v1/stuff等端点返回以下内容
Set-Cookie: id=c50b72c0-0b3a-11e7-b356-002590812948;Version=1;Comment="ID";Domain=.example.com;Path=/;HttpOnly
完成后,我们会创建一个 iframe,并且 iframe 中的所有请求都应该发送 cookie。当浏览器发出下一个请求(iframe ref)时,会发生以下几种情况之一
- 没有 cookie 被发送
- cookie 作为 id=9b639ea0-e800-11e6-b3ee-002590812948 发送
- cookie 作为 id=9b639ea0-e800-11e6-b3ee-002590812948 发送; id=c50b72c0-0b3a-11e7-b356-002590812948
- cookie 作为 id=c50b72c0-0b3a-11e7-b356-002590812948 发送
如果第一个请求确实使用了正确的 cookie,则下一组可能会有所不同并执行不同的操作(加载页面后大约 50 个 HTTP 调用,每个执行 4 个列出的状态之一)
我们看到它发生在 Chrome、Safari 和 Firefox 中。
调试:
这可能是一个应用程序问题,但我们还没有找到一种方法来调试设置 cookie 的内容。是否有任何浏览器可以通知我们对 cookie 状态的任何更改(来自 http 或 js)?
Javascript:
我们使用 react 14,这里是有问题的代码
发出网络请求
getUri(id)
.then((uri) => {
self.dispatch(uri.uri);
})
.catch((errorMessage) => {
self.actions.idFailures(errorMessage)
})
这里是getUri
getUri(id) {
return new Promise(function(resolve, reject) {
let url = 'rest/stuff/' + id;
request
.get(url)
.set('Accept', 'application/json')
.end(function(err, result){
if(err || !result){
reject(Error(err.response.text));
}
else {
resolve(JSON.parse(result.text));
}
});
});
},
设置 iframe
if(this.state.uri) {
instance = <iframe src={this.state.uri} style={iFrameStyle}> </iframe>;
}
【问题讨论】:
-
如果您不发布代码,您希望我们如何找出您做错了什么?
-
我在您发布的代码中没有看到任何与 cookie 相关的内容。
-
http 响应是设置 cookie 的原因
标签: javascript rest http iframe cookies