Skip to content


Subversion checkout URL

You can clone with
Download ZIP
An HTTP client with caching, built on top of request.


An HTTP client with caching, built on top of request. It works as a drop-in replacement for request. All that is needed is to pass a cache option:


  • Drop-in replacement for request
  • Memory or Redis backed cache
  • Takes advantage of ETag by using If-None-Match
  • Supports both public and private caching


var LRU = require('lru-cache');
var public_lru = new LRU();
var private_lru = new LRU();
var cache = new MemoryCache(public_lru, private_lru);
request('http://some.url', {cache: cache}, function(err, res, body) {


The cache object must be an object with the following methods:

  • add(key, private, val, function(err){})
  • get(key, function(err, val){})

How it works

  • All cacheable responses are cached, even if they are expired.
  • Nothing is ever removed from the cache.
  • If a cached response is not expired, returns it
  • If a cached response is expired, issue request with If-None-Match value from cached response's ETag. If response is 304 (Not Modified), returned cached response.
    • TODO: re-cache with updated expiry date?
  • Cacheable responses marked as private are added to a private cache
  • Cache lookups look in private cache first, and then in the public cache.
Something went wrong with that request. Please try again.