发布者: 笨鸟自学网
此策略不知道任何HTTP缓存控制指令。每个请求及其相应的响应都被缓存。当再次看到相同的请求时,将返回响应,而不从Internet传输任何内容。
虚拟策略对于更快地测试spider(而不必每次都等待下载)以及在无法连接到Internet时尝试离线使用spider非常有用。目标是能够“重播”蜘蛛的奔跑 和以前一样 .
此策略提供了一个符合RFC2616的HTTP缓存,即具有HTTP缓存控制意识,旨在生产,并在连续运行中使用,以避免下载未修改的数据(以节省带宽和加快爬行速度)。
实施的内容:
不要试图用存储响应/请求 no-store 缓存控制指令集
no-store
如果 no-cache 甚至为新响应设置了缓存控制指令
no-cache
计算新鲜度寿命 max-age 缓存控制指令
max-age
计算新鲜度寿命 Expires 响应报头
Expires
计算新鲜度寿命 Last-Modified 响应头(firefox使用的启发式方法)
Last-Modified
计算当前年龄 Age 响应报头
Age
计算当前年龄 Date 页眉
Date
基于以下内容重新验证过时响应 Last-Modified 响应报头
基于以下内容重新验证过时响应 ETag 响应报头
ETag
集合 Date 接收到的任何响应的头丢失了它
支持 max-stale 请求中的缓存控制指令
max-stale
这允许spider使用完整的rfc2616缓存策略进行配置,但避免按请求进行重新验证,同时保持与HTTP规范一致。
例子:
添加 Cache-Control: max-stale=600 请求头接受超过其过期时间不超过600秒的响应。
Cache-Control: max-stale=600
另见:RFC2616,14.9.3
缺少什么:
Pragma: no-cache 支持https://www.w3.org/protocols/rfc2616/rfc2616-sec14.html sec14.9.1
Pragma: no-cache
Vary 头支持https://www.w3.org/protocols/rfc2616/rfc2616-sec13.html sec13.6
Vary
更新或删除后无效https://www.w3.org/protocols/rfc2616/rfc2616-sec13.html sec13.10
…可能还有其他……
文件系统存储后端可用于HTTP缓存中间件。
每个请求/响应对存储在包含以下文件的不同目录中:
request_body -普通请求主体
request_body
request_headers -请求头(原始HTTP格式)
request_headers
response_body -普通反应体
response_body
response_headers -请求头(原始HTTP格式)
response_headers
meta -python中这个缓存资源的一些元数据 repr() 格式(grep友好格式)
meta
repr()
pickled_meta -中的相同元数据 meta 但是为了更有效的反序列化而进行的pickled
pickled_meta
目录名是根据请求指纹生成的(请参见 scrapy.utils.request.fingerprint 一级子目录用于避免在同一目录中创建过多的文件(在许多文件系统中效率低下)。示例目录可以是:
scrapy.utils.request.fingerprint
/path/to/cache/dir/example.com/72/72811f648e718090f041317756c03adb0ada46c7
A DBM 存储后端也可用于HTTP缓存中间件。
默认情况下,它使用 dbm ,但您可以用 HTTPCACHE_DBM_MODULE 设置。
dbm
HTTPCACHE_DBM_MODULE
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-9-8 09:18 , Processed in 0.135402 second(s), 17 queries .
© 2001-2020