OkHttp3緩存的說明

0父腕、http基礎(chǔ)

這部分內(nèi)容我也是網(wǎng)上搜索到的椅邓,看到和緩存有關(guān)的幾個關(guān)鍵詞:
** private柠逞、no-cache、max-age景馁、must- revalidate 板壮、Expires、Cache-Control合住、ETag绰精、Last-Modified-Date**
等,具體含義可以http 緩存的基礎(chǔ)知識透葛,但是以上關(guān)鍵字都是Get請求有關(guān)的笨使,Post請求一般是沒法緩存的。
為什么沒法緩存呢僚害? 因為http請求只是緩存 請求查詢操作硫椰,更新服務(wù)器數(shù)據(jù)是沒有緩存的,為什么沒有緩存呢萨蚕,因為一般情況http緩存都是把請求的url作為key靶草,相應(yīng)內(nèi)容作為value 來進行緩存的,大家也知道post請求中的url是一樣的岳遥,變化的是請求體爱致,所以一般http不緩存post請求。
但是既然我們知道了問題寒随,肯定有人能想到辦法來通過添加請求頭來緩存post請求 這篇文章說明了 post請求也可以緩存糠悯,但是文章也說了 需要服務(wù)器配合帮坚,如果服務(wù)器不配合那么只能手工存儲數(shù)據(jù)來實現(xiàn)緩存了!

1互艾、Okhttp緩存數(shù)據(jù)

首先如果是get請求试和,那么就用網(wǎng)上各種文章中的方法,就是添加okhttp攔截器纫普,添加請求頭的方式來緩存

private final Interceptor mRewriteCacheControlInterceptor = new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            String cacheControl = request.cacheControl().toString();
            if (!NetWorkUtils.isNetConnected(BaseApplication.getContext())) {
                request = request.newBuilder()
                        .cacheControl(TextUtils.isEmpty(cacheControl)? CacheControl.FORCE_CACHE:CacheControl.FORCE_NETWORK)
                        .build();
            }
            Response originalResponse = chain.proceed(request);
            if (NetWorkUtils.isNetConnected(BaseApplication.getContext())) {
                //有網(wǎng)的時候連接服務(wù)器請求,緩存一天
                return originalResponse.newBuilder()
                        .header("Cache-Control", "public, max-age=" + MAX_AGE)
                        .removeHeader("Pragma")
                        .build();
            } else {
                //網(wǎng)絡(luò)斷開時讀取緩存
                return originalResponse.newBuilder()
                        .header("Cache-Control", "public, only-if-cached, max-stale=" + CACHE_STALE_SEC)
                        .removeHeader("Pragma")
                        .build();
            }
        }
    };

但是如果是post請求阅悍,那就只能用下面方式了

  1. 數(shù)據(jù)庫緩存 Sqlite 這篇文章有說明 數(shù)據(jù)庫緩存
  2. 文件緩存 DiskLruCache 這篇文章有說明 文件緩存

3、Okhttp是不支持post緩存的

通過看okhttp源碼知道 okhttp3 -> Cache -> put方法

CacheRequest put(Response response) {
    String requestMethod = response.request().method();

    if (HttpMethod.invalidatesCache(response.request().method())) {
      try {
        remove(response.request());
      } catch (IOException ignored) {
        // The cache cannot be written.
      }
      return null;
    }
    if (!requestMethod.equals("GET")) {
      // Don't cache non-GET responses. We're technically allowed to cache
      // HEAD requests and some POST requests, but the complexity of doing
      // so is high and the benefit is low.
      return null;
    }

   ...
  }

從源碼中知道昨稼,okhttp會首先判斷請求方式节视,如果不是GET請求就直接返回了,不做任何緩存操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末假栓,一起剝皮案震驚了整個濱河市寻行,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匾荆,老刑警劉巖拌蜘,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異牙丽,居然都是意外死亡简卧,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門烤芦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來举娩,“玉大人,你說我怎么就攤上這事构罗∠” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵绰播,是天一觀的道長骄噪。 經(jīng)常有香客問我,道長蠢箩,這世上最難降的妖魔是什么链蕊? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮谬泌,結(jié)果婚禮上滔韵,老公的妹妹穿的比我還像新娘。我一直安慰自己掌实,他們只是感情好陪蜻,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贱鼻,像睡著了一般宴卖。 火紅的嫁衣襯著肌膚如雪滋将。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天症昏,我揣著相機與錄音随闽,去河邊找鬼。 笑死肝谭,一個胖子當(dāng)著我的面吹牛掘宪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播攘烛,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼魏滚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了坟漱?” 一聲冷哼從身側(cè)響起鼠次,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎靖秩,沒想到半個月后须眷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竖瘾,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡沟突,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捕传。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惠拭。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖庸论,靈堂內(nèi)的尸體忽然破棺而出职辅,到底是詐尸還是另有隱情,我是刑警寧澤聂示,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布域携,位于F島的核電站,受9級特大地震影響鱼喉,放射性物質(zhì)發(fā)生泄漏秀鞭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一扛禽、第九天 我趴在偏房一處隱蔽的房頂上張望锋边。 院中可真熱鬧,春花似錦编曼、人聲如沸豆巨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽往扔。三九已至贩猎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓤球,已是汗流浹背融欧。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卦羡,地道東北人噪馏。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像绿饵,于是被迫代替她去往敵國和親欠肾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理拟赊,服務(wù)發(fā)現(xiàn)刺桃,斷路器,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • Volley源碼分析之流程和緩存 前言 Android一開始提供了HttpURLConnection和HttpCl...
    大寫ls閱讀 619評論 0 6
  • 參考Android網(wǎng)絡(luò)請求心路歷程Android Http接地氣網(wǎng)絡(luò)請求(HttpURLConnection) 一...
    合肥黑閱讀 21,276評論 7 63
  • 大家好吸祟,之前我們講解了Okhttp網(wǎng)絡(luò)數(shù)據(jù)請求相關(guān)的內(nèi)容瑟慈,這一節(jié)我們講講數(shù)據(jù)緩存的處理。本節(jié)按以下內(nèi)容講解Okht...
    Ihesong閱讀 10,383評論 6 26
  • 被瑣碎的陰霾籠罩著 萬分惆悵 殘輝的芒在云間游蕩 迷失方向 而我 一副空空如也的軀殼 踏著青草 無所感覺 任由身后...
    不呆的書呆子閱讀 253評論 0 2