SlideShare une entreprise Scribd logo
1  sur  23
Télécharger pour lire hors ligne
Http Cache 的優化
Anson Chen 陳振揚
Android / Asp.net MVC developer
陳振揚 Anson Chen
Android、ASP.NET-MVC Developer
• Blog : http://anson-site.blogspot.tw (安森瓦舍)
• 個人作品:http://play.google.com/store/apps/developer?id=CityOne
About
Agenda
1. Http 如何運作
2. 常見的 Headers
3. Cache 的使用情境
4. OkHttp Interceptor
5. Code Example
6. Cache 的最佳化策略
Http 如何運作
常見的 Headers
名稱 範例 簡介
Date Wed, 20 Apr 2016 08:46:31
GMT
時間戳記
Cache-Control no-cache,max-age=30 表示使用何種 Cache 機制,經常使用的 directive
有:no-store , no-cache , public , private , max-
age
Pragma no-cache 表示使用何種 Cache 機制(在Http 1.1後都改為參考
Cache-Control 了)
Expires -1 表示 Cache 時間(在Http 1.1後都改為參考 Cache-
Control 了)
General
名稱 範例 簡介
Content-Length
145698 回應的內容長度
Content-Type
application/json 回應的格式,常見的有text/html(網頁)、text/plain(無格式
純文字)、application/json(JSON格式)、
application/xml(XML格式)、text/xml(XML格式)
Content-Language en 回應的語言
Content-Encoding gzip 回應的內容壓縮方式
Server Microsoft-IIS/8.5 表示何種技術的 web server
ETag "12345678" Cache 機制中的*內容驗證權杖,需要用引號("")包住
Last-Modified Wed, 20 Apr 2016
08:46:31 GMT
Cache 機制中的*時間驗證權杖,需使用 Universal Time
X-Powered-By ASP.NET 表示何種技術的 web service,X 開頭系列的 Header 通常
是非標準(各個語言自定義的),雖說是非標準,但有些 X
開頭的 Header 幾乎是很常見的
X-Version 4.0.30319 web service 當前版本
Response
名稱 範例 簡介
Accept */* 請求的內容的通用欄位
Accept-Charset
UTF-8 請求的內容編碼
Accept-Encoding gzip, deflate 請求的內容壓縮方式
Accept-Language zh-TW,zh-
CN;q=0.6,en-
US;q=0.2
請求的內容語言,q 代表請求權重(範圍值介於0~1之間,不寫
預設=1),以這個範例來說,我指定可以接受 zh-TW(繁中)zh-
CN(簡中)en-US(英文),其中又以 zh-TW 權重最高=1,zh-CN
其次=0.6,en-US 最低=0.2
Authorization YWJjOjEyMw== 通常會放身份驗證 token,Http 1.0時的規範格式為base64
encode後的username:password,abc:123 →
YWJjOjEyMw==
If-None-Match "12345678" 這裡會放上一次 Server 給的 ETag
If-Modified-Since
Wed, 20 Apr 2016
08:46:31 GMT
這裡會放上一次 Server 給的 Last-Modified
Request
Cache 的使用情境
Cache-Control 常見的 directive
• no-store : 完全不使用cache
• no-cache : 將資料存下來,但下次依然要訪問server
• public : 表示這份資料是公開的
• private : 限制只有當前這位client可以使用;用於敏感資料
• max-age : 指定cache使用期限(單位秒)
• max-stale : 用於(request)時指定cache過期後還能用多久
no-store
Client Server
200 OK
Cache-Control →no-store
...
[Content data]
200 OK
Cache-Control →no-store
...
[Content data]
GET
Checking
cache
GET
max-age
Client Server
200 OK
Cache-Control →max-age=60
...
[Content data] …10s
…60s
GET
Checking
cache
GET
Checking
cache
200 OK
Cache-Control →max-age=60
...
[Content data]
GET
no-cache + ETag
Client Server
GET
200 OK
Cache-Control →no-cache, private
ETag →“123"
...
[Content data]
GET
If-None-Match→ "123"
Checking
cache
304 Not Modified
Cache-Control →no-cache, private
ETag →“123"
...
no-cache + Last-Modified
Client Server
GET
200 OK
Cache-Control →no-cache, public
Last-Modified→ Sat, 01 Jan 2000 00:00:00 GMT
...
[Content data]
GET
If-Modified-Since → Sat, 01 Jan 2000 00:00:00 GMT
Checking
cache
304 Not Modified
Cache-Control →no-cache, public
Last-Modified→ Sat, 01 Jan 2000 00:00:00 GMT
...
OkHttp Interceptor
Application Interceptor
• Log handler
• Exception error handler
• Cache handler
• …..
Network Interceptor
• Log handler
• Header or parameter handler
• Exception error handler
• ……
Code Example
Asp.net : https://github.com/ct7ct7ct7/Demo-MVC_TestCache
Page :http://demo-test-cache.azurewebsites.net
Android : https://github.com/ct7ct7ct7/Demo-Android_TestCache
Demo :
Cache 的最佳化策略
Add Last-Modified
 檢查網路狀態
 無→使用 cache 資料
 有→檢查 cache 使用期限 (max-age)
 期限內→使用 cache 資料
 已過期→添加驗證權杖在 header 中
( If-Modified-Since 與 If-None-Match )
發送 request 時: 收到 response 後:
 200→儲存資料及相關 header 至 cache 中
( Etag 與 Last-Modified )
 304→使用 cache 資料
 Cache原則:減少 request 次數 & 降低 response 資料量
 max-age 要謹慎使用
 為你的 api 加上內容驗證 ( ETag ) 與時間驗證 ( Last-Modified )
Conclusion
 Google Developer – HTTP caching
 O3noBLOG - Cache Control 與 ETag
 HTTP 1.1 RFC 2616 - 13 Caching in HTTP
 HTTP 1.1 RFC 2616 – 14 Header Field Definitions
 Soul & Shell Blog - 初探 HTTP 1.1 Cache 機制
 Okhttp - Wiki
Reference

Contenu connexe

Tendances

高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践Frank Cai
 
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用redhat9
 
Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)Chu-Siang Lai
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧Chu-Siang Lai
 
聊聊我接触的集群管理
聊聊我接触的集群管理聊聊我接触的集群管理
聊聊我接触的集群管理rfyiamcool
 
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐twMVC#26 | 淺談 ASP.NET Caching 技術與實踐
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐twMVC
 
构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接 构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接 Renaun Erickson
 
缓存技术浅谈
缓存技术浅谈缓存技术浅谈
缓存技术浅谈Robbin Fan
 
Golang advance
Golang advanceGolang advance
Golang advancerfyiamcool
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡cachowu
 
Apache trafficserver
Apache trafficserverApache trafficserver
Apache trafficserverDin Dindin
 
高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用redhat9
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战rfyiamcool
 
Using armeria to write your RPC
Using armeria to write your RPCUsing armeria to write your RPC
Using armeria to write your RPCkoji lin
 
Modern php ch8 ch9 guide 導讀
Modern php ch8 ch9 guide 導讀Modern php ch8 ch9 guide 導讀
Modern php ch8 ch9 guide 導讀Chen Cheng-Wei
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & WindowsChu-Siang Lai
 
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能Mu Chun Wang
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsHo Kim
 

Tendances (18)

高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
ByPat博客出品-高性能Web服务器nginx及相关新技术的应用
 
Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)Automate with Ansible basic (3/e)
Automate with Ansible basic (3/e)
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧現代 IT 人一定要知道的 Ansible 自動化組態技巧
現代 IT 人一定要知道的 Ansible 自動化組態技巧
 
聊聊我接触的集群管理
聊聊我接触的集群管理聊聊我接触的集群管理
聊聊我接触的集群管理
 
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐twMVC#26 | 淺談 ASP.NET Caching 技術與實踐
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐
 
构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接 构建ActionScript游戏服务器,支持超过15000并发连接
构建ActionScript游戏服务器,支持超过15000并发连接
 
缓存技术浅谈
缓存技术浅谈缓存技术浅谈
缓存技术浅谈
 
Golang advance
Golang advanceGolang advance
Golang advance
 
使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡使用Nginx轻松实现开源负载均衡
使用Nginx轻松实现开源负载均衡
 
Apache trafficserver
Apache trafficserverApache trafficserver
Apache trafficserver
 
高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用高性能Web服务器nginx及相关新技术的应用
高性能Web服务器nginx及相关新技术的应用
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战
 
Using armeria to write your RPC
Using armeria to write your RPCUsing armeria to write your RPC
Using armeria to write your RPC
 
Modern php ch8 ch9 guide 導讀
Modern php ch8 ch9 guide 導讀Modern php ch8 ch9 guide 導讀
Modern php ch8 ch9 guide 導讀
 
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
現代 IT 人一定要知道的 Ansible 自動化組態技巧 Ⅱ - Roles & Windows
 
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization Skills
 

Similaire à Http cache 的優化

20111018 zhouchen share
20111018 zhouchen share20111018 zhouchen share
20111018 zhouchen sharezcbug
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践longhao
 
快!快!快! 互联网第一条军规
快!快!快! 互联网第一条军规快!快!快! 互联网第一条军规
快!快!快! 互联网第一条军规yangdj
 
反向代理工作原理及Squid简介
反向代理工作原理及Squid简介反向代理工作原理及Squid简介
反向代理工作原理及Squid简介diruser
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践丁 宇
 
twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事twMVC
 
高性能LAMP程序设计
高性能LAMP程序设计高性能LAMP程序设计
高性能LAMP程序设计fuchaoqun
 
PHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelPHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelHo Kim
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试tbmallf2e
 
Btrace intro(撒迦)
Btrace intro(撒迦)Btrace intro(撒迦)
Btrace intro(撒迦)ykdsg
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础xki
 
Large-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The HoodLarge-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The HoodLei (Harry) Zhang
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践zhliji2
 
前端性能测试
前端性能测试前端性能测试
前端性能测试tbmallf2e
 
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践mysqlops
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践self study
 

Similaire à Http cache 的優化 (20)

20111018 zhouchen share
20111018 zhouchen share20111018 zhouchen share
20111018 zhouchen share
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
高性能网站最佳实践
高性能网站最佳实践高性能网站最佳实践
高性能网站最佳实践
 
快!快!快! 互联网第一条军规
快!快!快! 互联网第一条军规快!快!快! 互联网第一条军规
快!快!快! 互联网第一条军规
 
反向代理工作原理及Squid简介
反向代理工作原理及Squid简介反向代理工作原理及Squid简介
反向代理工作原理及Squid简介
 
淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践淘宝网前台应用性能优化实践
淘宝网前台应用性能优化实践
 
twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事twMVC 47_Elastic APM 的兩三事
twMVC 47_Elastic APM 的兩三事
 
高性能LAMP程序设计
高性能LAMP程序设计高性能LAMP程序设计
高性能LAMP程序设计
 
PHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits LevelPHP Optimization for Millions Visits Level
PHP Optimization for Millions Visits Level
 
前端性能优化&测试
前端性能优化&测试前端性能优化&测试
前端性能优化&测试
 
Berserk js
Berserk jsBerserk js
Berserk js
 
Html5
Html5Html5
Html5
 
老舊web上雲端
老舊web上雲端老舊web上雲端
老舊web上雲端
 
Btrace intro(撒迦)
Btrace intro(撒迦)Btrace intro(撒迦)
Btrace intro(撒迦)
 
WEB 安全基础
WEB 安全基础WEB 安全基础
WEB 安全基础
 
Large-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The HoodLarge-Scale Cluster Mangement & Kubernetes Under The Hood
Large-Scale Cluster Mangement & Kubernetes Under The Hood
 
Lamp优化实践
Lamp优化实践Lamp优化实践
Lamp优化实践
 
前端性能测试
前端性能测试前端性能测试
前端性能测试
 
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
Web请求异步处理和海量数据即时分析在淘宝开放平台的实践
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 

Http cache 的優化

  • 1. Http Cache 的優化 Anson Chen 陳振揚 Android / Asp.net MVC developer
  • 2. 陳振揚 Anson Chen Android、ASP.NET-MVC Developer • Blog : http://anson-site.blogspot.tw (安森瓦舍) • 個人作品:http://play.google.com/store/apps/developer?id=CityOne About
  • 3. Agenda 1. Http 如何運作 2. 常見的 Headers 3. Cache 的使用情境 4. OkHttp Interceptor 5. Code Example 6. Cache 的最佳化策略
  • 5.
  • 7. 名稱 範例 簡介 Date Wed, 20 Apr 2016 08:46:31 GMT 時間戳記 Cache-Control no-cache,max-age=30 表示使用何種 Cache 機制,經常使用的 directive 有:no-store , no-cache , public , private , max- age Pragma no-cache 表示使用何種 Cache 機制(在Http 1.1後都改為參考 Cache-Control 了) Expires -1 表示 Cache 時間(在Http 1.1後都改為參考 Cache- Control 了) General
  • 8. 名稱 範例 簡介 Content-Length 145698 回應的內容長度 Content-Type application/json 回應的格式,常見的有text/html(網頁)、text/plain(無格式 純文字)、application/json(JSON格式)、 application/xml(XML格式)、text/xml(XML格式) Content-Language en 回應的語言 Content-Encoding gzip 回應的內容壓縮方式 Server Microsoft-IIS/8.5 表示何種技術的 web server ETag "12345678" Cache 機制中的*內容驗證權杖,需要用引號("")包住 Last-Modified Wed, 20 Apr 2016 08:46:31 GMT Cache 機制中的*時間驗證權杖,需使用 Universal Time X-Powered-By ASP.NET 表示何種技術的 web service,X 開頭系列的 Header 通常 是非標準(各個語言自定義的),雖說是非標準,但有些 X 開頭的 Header 幾乎是很常見的 X-Version 4.0.30319 web service 當前版本 Response
  • 9. 名稱 範例 簡介 Accept */* 請求的內容的通用欄位 Accept-Charset UTF-8 請求的內容編碼 Accept-Encoding gzip, deflate 請求的內容壓縮方式 Accept-Language zh-TW,zh- CN;q=0.6,en- US;q=0.2 請求的內容語言,q 代表請求權重(範圍值介於0~1之間,不寫 預設=1),以這個範例來說,我指定可以接受 zh-TW(繁中)zh- CN(簡中)en-US(英文),其中又以 zh-TW 權重最高=1,zh-CN 其次=0.6,en-US 最低=0.2 Authorization YWJjOjEyMw== 通常會放身份驗證 token,Http 1.0時的規範格式為base64 encode後的username:password,abc:123 → YWJjOjEyMw== If-None-Match "12345678" 這裡會放上一次 Server 給的 ETag If-Modified-Since Wed, 20 Apr 2016 08:46:31 GMT 這裡會放上一次 Server 給的 Last-Modified Request
  • 11. Cache-Control 常見的 directive • no-store : 完全不使用cache • no-cache : 將資料存下來,但下次依然要訪問server • public : 表示這份資料是公開的 • private : 限制只有當前這位client可以使用;用於敏感資料 • max-age : 指定cache使用期限(單位秒) • max-stale : 用於(request)時指定cache過期後還能用多久
  • 12. no-store Client Server 200 OK Cache-Control →no-store ... [Content data] 200 OK Cache-Control →no-store ... [Content data] GET Checking cache GET
  • 13. max-age Client Server 200 OK Cache-Control →max-age=60 ... [Content data] …10s …60s GET Checking cache GET Checking cache 200 OK Cache-Control →max-age=60 ... [Content data] GET
  • 14. no-cache + ETag Client Server GET 200 OK Cache-Control →no-cache, private ETag →“123" ... [Content data] GET If-None-Match→ "123" Checking cache 304 Not Modified Cache-Control →no-cache, private ETag →“123" ...
  • 15. no-cache + Last-Modified Client Server GET 200 OK Cache-Control →no-cache, public Last-Modified→ Sat, 01 Jan 2000 00:00:00 GMT ... [Content data] GET If-Modified-Since → Sat, 01 Jan 2000 00:00:00 GMT Checking cache 304 Not Modified Cache-Control →no-cache, public Last-Modified→ Sat, 01 Jan 2000 00:00:00 GMT ...
  • 17. Application Interceptor • Log handler • Exception error handler • Cache handler • ….. Network Interceptor • Log handler • Header or parameter handler • Exception error handler • ……
  • 18. Code Example Asp.net : https://github.com/ct7ct7ct7/Demo-MVC_TestCache Page :http://demo-test-cache.azurewebsites.net Android : https://github.com/ct7ct7ct7/Demo-Android_TestCache Demo :
  • 21.  檢查網路狀態  無→使用 cache 資料  有→檢查 cache 使用期限 (max-age)  期限內→使用 cache 資料  已過期→添加驗證權杖在 header 中 ( If-Modified-Since 與 If-None-Match ) 發送 request 時: 收到 response 後:  200→儲存資料及相關 header 至 cache 中 ( Etag 與 Last-Modified )  304→使用 cache 資料
  • 22.  Cache原則:減少 request 次數 & 降低 response 資料量  max-age 要謹慎使用  為你的 api 加上內容驗證 ( ETag ) 與時間驗證 ( Last-Modified ) Conclusion
  • 23.  Google Developer – HTTP caching  O3noBLOG - Cache Control 與 ETag  HTTP 1.1 RFC 2616 - 13 Caching in HTTP  HTTP 1.1 RFC 2616 – 14 Header Field Definitions  Soul & Shell Blog - 初探 HTTP 1.1 Cache 機制  Okhttp - Wiki Reference