如何停止在 ionic 3 中缓存我的 HTTP 请求和响应
How to stop caching my HTTP request & response in ionic 3
我想停止缓存我的 API 请求和响应,native-http
插件存储了它的缓存及其对我的应用程序造成的问题。
All-time API 工作正常,但是当我从服务器收到 404 或 401 错误时,它会将其缓存在我的应用程序中,然后在所有时间后我将收到状态为 1 的超时错误.
为了解决这个问题,我需要卸载该应用程序并重新安装它才能正常工作。
知道如何停止缓存 HTTP 请求和响应吗?
或者如何解决状态为 1 的超时问题?
我在请求中尝试了以下方法 header 但仍然没有成功。
self.httpPlugin.setHeader('*', 'authorization', 'Bearer ' + token);
self.httpPlugin.setHeader('*', 'Cache-control', 'no-cache');
self.httpPlugin.setHeader('*', 'Cache-control', 'no-store');
self.httpPlugin.setHeader('*', 'Expires', '0');
self.httpPlugin.setHeader('*', 'Pragma', 'no-cache');
还在我的请求中添加了一个虚拟唯一参数,以发出我的 API 调用的唯一请求,如下所示。
self.httpPlugin.setHeader('*', 'ExtraDate', new Date().toString());
有人在 Ionic 3 中遇到过此类问题吗?
尝试了 this 个线程建议,但一点都不成功。
针对此问题提出任何解决方案。
编辑:
完整请求代码:
/**
* Get Search result from server.
*/
getCaseListBySearchText(searchText: string): Observable<any> {
let self = this;
return Observable.create(function(observer) {
self.getToken().then(token => {
console.log("Token : ", token);
// let rand = Math.random();
self.httpPlugin.setHeader("*", "authorization", "Bearer " + token);
self.httpPlugin.setHeader("*", "Cache-control", "no-cache");
self.httpPlugin.setHeader("*", "Cache-control", "no-store");
// self.httpPlugin.setHeader("*", "Expires", "0");
self.httpPlugin.setHeader("*", "Cache-control", "max-age=0");
self.httpPlugin.setHeader("*", "Pragma", "no-cache");
self.httpPlugin.setHeader("*", "ExtraDate", new Date().toString());
self.httpPlugin
.get(self.url + "/CaseList?caseNum=" + searchText, {}, {})
.then(response => {
console.log("Response Success : " + JSON.stringify(response));
let jsonResponse = JSON.parse(response.data);
console.log("JSON OBJECT RESPONSE : " + jsonResponse);
observer.next(jsonResponse);
})
.catch(error => {
if (error.status == 403) {
console.log("Token expired : " + JSON.stringify(error));
self.isTokenExpired = true;
//Removing Old Token
self.storage.remove(Constants.AUTH_DATA);
observer.error(error);
} else {
console.log("Error : " + error);
console.log("Error " + JSON.stringify(error));
observer.error(error);
}
});
})
.catch(error => {
console.log("Error : " + error);
observer.error(error);
});
});
}
您可以查看响应 header 以确定服务器向您的客户端反馈的有关缓存的内容。您还可以尝试通过设置 Cache-Control 来强制服务器发出新的响应:max-age=0.
此外,我会避免将 Expires header 设置为 0,因为这通常由服务器设置并且被定义为类似“1970 年 1 月 1 日 00:00:00 GMT”的日期。总的来说,这三个请求 header 应该足以满足 no-cache 机制。
- 编译指示:no-cache
- cache-control: no-cache
- cache-control: max-age=0
大部分关于http缓存的行为在相应的RFC中都有解释:
通常如果您在请求中添加随机数 URL header。你可以实现它。
与我分享完整的块代码,我会尽力帮助你。
在针对上述问题进行大量研发和网络搜索之后,我找到了一个清理请求缓存的解决方案,如上所述 header 无法清理缓存。
在 HTTP Advanced 插件中,有一种方法可以清除我的 cookie。
clearCookies()
Clear all cookies.
通过在我的 class 构造函数中使用上述方法在调用任何 API.
之前清除 cookie
那么它会做什么清除我所有的 cookie,我与旧 cookie 相关的问题将以这种方式解决。
constructor(
public storage: Storage,
public httpPlugin: HTTP,
private platform: Platform
) {
// enable SSL pinning
httpPlugin.setSSLCertMode("pinned");
//Clear old cookies
httpPlugin.clearCookies();
}
以上代码解决了我的问题。
感谢大家的快速指导和建议。
如果这不是清除我的旧请求数据的正确方法,请对此发表评论。
我想停止缓存我的 API 请求和响应,native-http
插件存储了它的缓存及其对我的应用程序造成的问题。
All-time API 工作正常,但是当我从服务器收到 404 或 401 错误时,它会将其缓存在我的应用程序中,然后在所有时间后我将收到状态为 1 的超时错误.
为了解决这个问题,我需要卸载该应用程序并重新安装它才能正常工作。
知道如何停止缓存 HTTP 请求和响应吗?
或者如何解决状态为 1 的超时问题?
我在请求中尝试了以下方法 header 但仍然没有成功。
self.httpPlugin.setHeader('*', 'authorization', 'Bearer ' + token);
self.httpPlugin.setHeader('*', 'Cache-control', 'no-cache');
self.httpPlugin.setHeader('*', 'Cache-control', 'no-store');
self.httpPlugin.setHeader('*', 'Expires', '0');
self.httpPlugin.setHeader('*', 'Pragma', 'no-cache');
还在我的请求中添加了一个虚拟唯一参数,以发出我的 API 调用的唯一请求,如下所示。
self.httpPlugin.setHeader('*', 'ExtraDate', new Date().toString());
有人在 Ionic 3 中遇到过此类问题吗?
尝试了 this 个线程建议,但一点都不成功。
针对此问题提出任何解决方案。
编辑:
完整请求代码:
/**
* Get Search result from server.
*/
getCaseListBySearchText(searchText: string): Observable<any> {
let self = this;
return Observable.create(function(observer) {
self.getToken().then(token => {
console.log("Token : ", token);
// let rand = Math.random();
self.httpPlugin.setHeader("*", "authorization", "Bearer " + token);
self.httpPlugin.setHeader("*", "Cache-control", "no-cache");
self.httpPlugin.setHeader("*", "Cache-control", "no-store");
// self.httpPlugin.setHeader("*", "Expires", "0");
self.httpPlugin.setHeader("*", "Cache-control", "max-age=0");
self.httpPlugin.setHeader("*", "Pragma", "no-cache");
self.httpPlugin.setHeader("*", "ExtraDate", new Date().toString());
self.httpPlugin
.get(self.url + "/CaseList?caseNum=" + searchText, {}, {})
.then(response => {
console.log("Response Success : " + JSON.stringify(response));
let jsonResponse = JSON.parse(response.data);
console.log("JSON OBJECT RESPONSE : " + jsonResponse);
observer.next(jsonResponse);
})
.catch(error => {
if (error.status == 403) {
console.log("Token expired : " + JSON.stringify(error));
self.isTokenExpired = true;
//Removing Old Token
self.storage.remove(Constants.AUTH_DATA);
observer.error(error);
} else {
console.log("Error : " + error);
console.log("Error " + JSON.stringify(error));
observer.error(error);
}
});
})
.catch(error => {
console.log("Error : " + error);
observer.error(error);
});
});
}
您可以查看响应 header 以确定服务器向您的客户端反馈的有关缓存的内容。您还可以尝试通过设置 Cache-Control 来强制服务器发出新的响应:max-age=0.
此外,我会避免将 Expires header 设置为 0,因为这通常由服务器设置并且被定义为类似“1970 年 1 月 1 日 00:00:00 GMT”的日期。总的来说,这三个请求 header 应该足以满足 no-cache 机制。
- 编译指示:no-cache
- cache-control: no-cache
- cache-control: max-age=0
大部分关于http缓存的行为在相应的RFC中都有解释:
通常如果您在请求中添加随机数 URL header。你可以实现它。
与我分享完整的块代码,我会尽力帮助你。
在针对上述问题进行大量研发和网络搜索之后,我找到了一个清理请求缓存的解决方案,如上所述 header 无法清理缓存。
在 HTTP Advanced 插件中,有一种方法可以清除我的 cookie。
clearCookies()
Clear all cookies.
通过在我的 class 构造函数中使用上述方法在调用任何 API.
之前清除 cookie那么它会做什么清除我所有的 cookie,我与旧 cookie 相关的问题将以这种方式解决。
constructor(
public storage: Storage,
public httpPlugin: HTTP,
private platform: Platform
) {
// enable SSL pinning
httpPlugin.setSSLCertMode("pinned");
//Clear old cookies
httpPlugin.clearCookies();
}
以上代码解决了我的问题。
感谢大家的快速指导和建议。
如果这不是清除我的旧请求数据的正确方法,请对此发表评论。