【发布时间】:2018-11-18 08:51:00
【问题描述】:
我有一个 Angular 5 应用程序,它尝试通过 HTTP-GET API 调用加载产品并在 iOS Safari 和 Mac OS Safari 上崩溃。
我第一次访问该页面时一切正常,但第二次之后我的 Angular 应用程序崩溃了,因为 HTTP-GET 没有返回预期值。
我检查了开发者控制台,结果发现 Safari 没有从我的域发送 GET 工作所需的 cookie。
它说请求来自硬盘缓存。 我检查了服务器上的日志文件,Safari 实际上调用了我的 API(尽管它说它使用了硬盘缓存)但没有 cookie。
来自我的 Angular 应用程序的 HTTP-GET 如下所示:
this.noCacheHeader = new HttpHeaders()
.append('Cache-Control', 'no-cache')
.append('Cache-control', 'no-store')
.append('Expires', '0')
.append('Pragma', 'no-cache');
get<T>(url: string): Observable<T> {
return this.http.get<T>(this.baseUrl + url, { withCredentials: true, headers: this.noCacheHeader });
}
由于 IE11 的缓存问题,我已经禁用缓存。
如何让 Safari 始终发送我的 cookie?
更新 1:
我在我的 HTTP-GET 查询“products?ticks=1337”中添加了一个 ticks 参数,现在它可以工作了。所以它一定和缓存有关。
【问题讨论】:
-
我在 Safari 上遇到了同样的问题。我不得不去偏好->隐私->取消选中“防止跨站点跟踪”
-
谢谢@BradenBrown,就我而言,这是未通过请求发送 cookie 的根本原因。