/es-fresh

fresh rewrite in TypeScript with ESM and CommonJS targets

Primary LanguageTypeScriptMIT LicenseMIT

es-fresh

Top language Vulnerabilities Version Node Version Last commit

This is a copy of @foxify/fresh package but with ESM and CommonJS targets.

HTTP response freshness testing.

Install

pnpm i es-fresh

API

import fresh from 'es-fresh'

fresh(reqHeaders, resHeaders)

Check freshness of the response using request and response headers.

When the response is still "fresh" in the client's cache true is returned, otherwise false is returned to indicate that the client cache is now stale and the full response should be sent.

When a client sends the Cache-Control: no-cache request header to indicate an end-to-end reload request, this module will return false to make handling these requests transparent.

Example

import fresh from 'es-fresh'
import { createServer } from 'http'

function isFresh(req, res) {
  return fresh(req.headers, {
    etag: res.getHeader('ETag'),
    'last-modified': res.getHeader('Last-Modified'),
  })
}

createServer((req, res) => {
  // perform server logic
  // ... including adding ETag / Last-Modified response headers

  if (isFresh(req, res)) {
    // client has a fresh copy of resource
    res.statusCode = 304
    res.end()
    return
  }

  // send the resource
  res.statusCode = 200
  res.end('hello, world!')
}).listen(3000)

License

MIT © v1rtl