23. 离线应用与客户端存储
离线应用要与传统客户端应用同场竞技
- 首先,要能确定设备能否上网,以便下一步执行正确的操作
- 然后,应用还必须能访问一定的资源(图像、JavaScript、CSS等)
- 最后,要有本地存储空间,无论是否上网都不妨碍读写
23.1 离线检测
- 属性
navigator.onLine
- 事件
onlineoffline
23.2 应用缓存application cache
- 描述文件
manifest file
CACHE MANIFEST
#Comment
file.js
file.css
- 引用
<html manifest="/offline.manifest"> applicationCache对象status0无缓存1闲置2检查中3下载中…- 事件
checking/error/noupdate/downloading/progress/updateready/cached
23.3 数据存储
某个特定用户的信息应该存储在该用户的机器上。(登录信息、偏好设定)
- Cookie 在客户端存储会话信息
服务器响应头:
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
Other-header: other-header-value
浏览器为每个请求添加Cookie HTTP头将信息发送回服务器:
GET /index.html HTTP/1.1
Cookie: name=value
Other-header: other-header-value
- cookie 限制
- cookie在性质上是绑定在特定的域名下的。
- 当设定一个cookie后,再给创建他的域名发送请求时,都会包含这个cookie。
- 这个限制确保了存储在cookie的信息只能让批准的接受者访问。
- 删除策略
LRUleast recently used 最近最少使用
- cookie 构成
- 名称
Name - 值
Value字符串 - 域
Domain - 路径
Path - 失效时间
Expires / Max-Age - 安全标志
Secure使用SSL连接时才发送
- 名称
域、路径、失效时间、secure标志都是服务器传递给浏览器的指示,以指定如何发送cookie。这些参数并不会作为发送到服务器的信息的一部分,只有名值对儿才会被发送。
Response Headers:
Request Headers:
- JavaScript中使用Cookie
document.cookie; // 读
document.cookie = "name=value"; // 写
document.cookie = encodeURIComponent("name") + "="
+ encodeURIComponent("value") + "; domain=www.github.com; path=/";
- 子Cookie
subcookie- 为了绕开浏览器对cookie数的限制,
name=name1=value1&name2=value2
- 为了绕开浏览器对cookie数的限制,
- cookie性能
- 所有的cookie都会由浏览器作为请求头发送,所以cookie中存储大量信息会影响到特定域的请求性能。
当数据需要被严格控制在客户端上时,无需持续地将数据发回服务器。WebStorage的两个目标:
- 提供一种cookie之外的存储会话数据的途径
- 提供一种存储大量可以跨会话存在的数据机制
- WebStorage
- 通用方法和属性
clear()getItem(name)key(index)setItem(name, value)removeItem(name)length
sessionStorage会话- IE的事务形式方法,begin,commit
- globalStorage 已废弃
localStorage- 持久保存客户端数据
- 数据保留到通过JavaScript清除或者用户自己清除浏览器缓存
storage事件indexedDB在浏览器中保存结构化数据的一种数据库event.target.resultsetVersion()onerror/onsuccesstransaction()事务- 游标查询
openCursor() - 键范围
key range - 索引
createIndex()
- 通用方法和属性
- 限制
- 同源(协议,域名,端口) -> 不能跨域共享

京公网安备 11010502036488号