我有一个 Angular 5 应用程序,它尝试通过 HTTP-GET API 调用加载产品,但在 iOS Safari 和 Mac OS Safari 上崩溃。
第一次访问该页面时一切正常,但第二次之后我的 Angular 应用程序崩溃了,因为 HTTP-GET 未返回预期值。
我检查了开发人员控制台,结果发现 Safari 没有从我的域发送 GET 工作所需的 cookie。
它说请求来自硬盘缓存。 我检查了服务器上的日志文件,Safari 实际上调用了我的 API(尽管它说它使用了硬盘缓存),但没有 cookie。
来 self 的 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 上也遇到了类似的问题。我正在使用<audio>
jquery 加载的 html 中的标签。 Safari 未在音频源请求中包含 cookie,因此无法正确加载。但不知怎的,在我用 CTRL+F5 刷新页面后它就起作用了 - 它通过完全重新加载发送了 cookie...
我通过添加 crossorigin="use-credentials"
解决了这个问题...令人讨厌的问题。
关于angular - iOS Safari 和 Mac OS Safari 不发送 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50758167/