代码之家  ›  专栏  ›  技术社区  ›  CodeChanger

如何在ionic 3中停止缓存我的HTTP请求和响应

  •  9
  • CodeChanger  · 技术社区  · 6 年前

    所有时间的API工作正常,但当我从服务器得到404或401错误,它会缓存在我的应用程序,然后在所有时间后,我会得到1状态超时错误。

    为了克服这个问题,我需要卸载应用程序,并重新安装它将按预期工作。

    知道如何停止缓存HTTP请求和响应吗?

    或者如何解决状态为1的超时问题?

    我在我的请求头中尝试了以下内容,但仍然没有成功。

    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');
    

    self.httpPlugin.setHeader('*', 'ExtraDate', new Date().toString());
    

    有人在《爱奥尼亚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);
        });
    });
    
    
    }
    
    3 回复  |  直到 5 年前
        1
  •  2
  •   CodeChanger    3 年前

    经过大量的研发;关于上述问题,我找到了一个解决方案来清理我的请求缓存,因为首先,头文件不能清理缓存。

    在http高级插件中,有一种方法可以清除我的cookies。

    clearCookies()

    清除所有Cookie。

    因此,它将做什么清除我所有的饼干和我的问题有关的旧饼干将解决这种方式。

    constructor(
        public storage: Storage,
        public httpPlugin: HTTP,
        private platform: Platform
      ) {
        // enable SSL pinning
        httpPlugin.setSSLCertMode("pinned");
        //Clear old cookies
        httpPlugin.clearCookies();
      }
    

    上面的代码解决了我的问题。

    感谢大家的快速指导和建议。

    如果这不是清除旧请求数据的正确方法,请对此进行评论。

        2
  •  1
  •   Burak Sarigul    6 年前

    另外,我会避免将Expires头设置为0,因为这通常是由服务器设置的,并且定义为类似“1970年1月1日00:00:00 GMT”的日期。总的来说,这三个请求头应该足够好,不需要缓存机制。

    • pragma:没有缓存
    • 缓存控制:无缓存
    • 缓存控制:最大年龄=0

    https://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html

        3
  •  1
  •   Khurram Shaikh    6 年前

    通常,如果您在请求的URL头中添加随机数。你可以做到的。

    与我分享完整的代码块,我会尽力帮助你。