egret-docs-master/Native/manual/httpcache.md

135 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: 原生缓存策略
---
* 以下内容仅适用于应用运行过程中下载的资源assets、预加载目录下的资源不会被runtime更新。
* index.html 不会被缓存,每次都会从服务器读取.
* 不想被缓存的资源,可以通过增加随机值的方法来请求
例如:
```
var xhr = new XMLHttpRequest();
xhr.open('GET', './manifest.json?v=' + Math.random(), true);
```
* runtime支持服务器的缓存策略比如`Cache-Control:max-age=age`
runtime下载的资源只有超出了`max-age`设置的过期时间以后才会向服务器发送资源的更新请求。此外在过期以后如果服务器上的资源没有发生变化runtime不会重新下载这个资源。只有资源发生变化时才会重新下载。
## 一、支持的http缓存字段
### 1.1 Cache-Control字段及取值清单
```
Cache-Control:no-cache
Cache-Control:no-store
Cache-Control:max-age=age
```
对于其他取值runtime则会通过下面的Date字段、Expires字段和Last-Modified字段等信息计算缓存是否有效。
其中,
```
Cache-Control:no-cache
```
表示禁用缓存;
```
Cache-Control:no-store
```
表示不存储任何信息;
```
Cache-Control:max-age=age
```
表示缓存在age时间内有效age的取值为数字单位为秒。
### 1.2 Pragma字段及取值清单
```
Pragma:no-cache
```
表示禁用缓存为HTTP1.0的标准优先级低于
```
Cache-Control:no-cache
```
### 1.3 Date字段及取值清单
```
Date:HTTP-date
```
表示响应是在HTTP-date所代表的时间生成的。例如
```
Date: Tue, 15 Nov 1994 08:12:31 GMT
```
表示的是响应是在Tue, 15 Nov 1994 08:12:31 GMT生成的。
### 1.4 Expires字段及取值清单
```
Expires:HTTP-date
```
表示缓存在HTTP-date所代表的的时间之后失效。例如
```
Expires: Thu, 01 Dec 1994 16:00:00 GMT
```
表示缓存是在Thu, 01 Dec 1994 16:00:00 GMT之后失效。
如果不存在
```
Cache-Control:max-age=age
```
```
Expires:HTTP-date
```
字段那么runtime会使用Date字段和Last-Modified字段等信息计算缓存是否有效。
### 1.5 Last-Modified字段及取值清单
```
Last-Modified:HTTP-date
```
表示资源在服务器上的最后修改时间。例如:
```
Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
```
表示资源在服务器上的最后修改时间是Tue, 15 Nov 1994 12:45:26 GMT。
### 1.6 ETag字段及取值清单
```
ETag:entity-tag
```
表示资源在服务器上的唯一标志entity-tag是一个服务器能够理解的值。
## 二、使用说明
为了合理的利用资源减少不必要的流量消耗服务器端应该合理的配置响应头字段从而使得runtime和浏览器能够更加高效的使用缓存资源。
### 2.1 设置缓存的有效期
使用
```
Cache-Control:max-age=age
```
```
Expires:HTTP-date
```
都可以设置缓存的有效期但是一个是HTTP 1.1标准一个是HTTP 1.0标准并且如果两个同时出现那么前者的优先级高于后者。推荐使用前者或者两者同时配置。如果不配置那么runtime和浏览器就会自己计算有效期这样的话不利于实现服务器和客户端的紧密配合。因此推荐设置缓存的有效期。
### 2.2 设置Last-Modified和ETag
当缓存失效的时候runtime和浏览器会将这两个值加入到请求头中使服务器能够高效的判断资源是否过期从而决定是返回304还是返回200。
推荐配置Last-Modified和ETag。如果两者同时出现服务器会优先使用ETag进行处理。