通过HTTP协议可用的缓存选项的详细说明
缓存是一种可以帮助网络连接更快的技术,因为需要传输的内容越少越好。
许多资源可能非常大,并且在时间和检索的实际成本(例如在移动设备上)方面都非常昂贵。
HTTP提供了不同的缓存策略,浏览器使用了它们。
没有缓存
首先,Cache-Control
标头可以告诉浏览器在不首先检查ETag值的情况下从不使用资源的缓存版本(稍后会详细介绍),方法是使用no-cache
价值:
Cache-Control: no-cache
限制性更强no-store
选项告诉浏览器(以及所有中间网络设备)甚至不将资源存储在其缓存中:
Cache-Control: no-store
如果Cache-Control
有max-age
值,用于确定此资源作为缓存有效的秒数:
Cache-Control: max-age=3600
这Expires
标头
发送HTTP请求后,浏览器会根据您所需的URL检查它是否在缓存中具有该页面的副本。
如果存在,它将检查页面是否存在新鲜。
如果页面是新鲜的HTTP响应Expires
标头值小于当前日期时间。
Expires标头采用以下形式:
Expires: Sat, 01 Dec 2018 16:00:00 GMT
有条件的GET
有多种执行条件获取的方法。所有都是基于使用If-*
请求标头:
- 使用
If-Modified-Since
和Last-Modified
- 使用
If-None-Match
和ETag
使用If-Modified-Since
和Last-Modified
浏览器可以向服务器发送请求,而不仅仅是请求页面,它还添加了一个If-Modified-Since
标头,基于Last-Modified
从当前缓存的页面获取的标头值。
这告诉服务器,如果自该日期以来资源已更新,则仅返回响应正文(页面内容)。
否则,服务器返回一个304 Not Modified
回复。
使用If-None-Match
和ETag
Web服务器(取决于设置,页面的提供方式等)可以发送ETag标头。
那是资源的标识符。每次资源更改(例如更新)时,ETag也应更改。
就像校验和。
浏览器发送一个If-None-Match
标头包含一个(或多个)ETag值。
如果不匹配,则服务器返回资源的最新版本,否则返回304 Not Modified
回复。
更多网络教程:
- WebSockets简介
- HTTP请求如何工作
- HTTP请求标头列表
- HTTP响应标头列表
- HTTP与HTTPS
- 什么是RFC?
- HTTP协议
- HTTPS协议
- HTTP请求的curl指南
- HTTP缓存
- HTTP状态代码列表
- 什么是CDN?
- HTTP / 2协议
- 什么是港口
- DNS,域名系统
- TCP协议
- UDP协议
- REST API简介
- 如何在macOS中安装本地SSL证书
- 如何生成本地SSL证书
- 如何为HTTPS配置Nginx
- 一个简单的Nginx反向代理,用于从子文件夹中提供多个Node.js应用程序
- 什么是反向代理?