jshttp/fresh

Name: fresh

Owner: jshttp

Description: HTTP request freshness testing

Created: 2012-06-10 19:09:09.0

Updated: 2018-01-13 05:08:11.0

Pushed: 2017-09-26 18:17:16.0

Homepage:

Size: 67

Language: JavaScript

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

fresh

NPM Version NPM Downloads Node.js Version Build Status Test Coverage

HTTP response freshness testing

Installation

This is a Node.js module available through the npm registry. Installation is done using the npm install command:

m install fresh
API
fresh = require('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.

Known Issues

This module is designed to only follow the HTTP specifications, not to work-around all kinda of client bugs (especially since this module typically does not receive enough information to understand what the client actually is).

There is a known issue that in certain versions of Safari, Safari will incorrectly make a request that allows this module to validate freshness of the resource even when Safari does not have a representation of the resource in the cache. The module jumanji can be used in an Express application to work-around this issue and also provides links to further reading on this Safari bug.

Example
API usage
reqHeaders = { 'if-none-match': '"foo"' }
resHeaders = { 'etag': '"bar"' }
h(reqHeaders, resHeaders)
> false

reqHeaders = { 'if-none-match': '"foo"' }
resHeaders = { 'etag': '"foo"' }
h(reqHeaders, resHeaders)
> true
Using with Node.js http server
fresh = require('fresh')
http = require('http')

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

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


 send the resource
s.statusCode = 200
s.end('hello, world!')


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



er.listen(3000)
License

MIT


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.