Git Product home page Git Product logo

fastify-disablecache's Introduction

fastify-disablecache

GitHub Release npm version Build status Coverage status code style: Prettier

Fastify plugin to disable client-side caching

Overview

Inspired by nocache, the fastify-disablecache plugin sets the following response headers and values to disable client-side caching:

Cache-Control: no-store, max-age=0, must-revalidate
Expires: 0
Pragma: no-cache
Surrogate-Control: no-store

This plugin was created out of a need for an easy way to disable client-side caching for data received from backend APIs. This ensures data is always current when called by applications.

Why these headers?

Installation

Install using npm:

npm i fastify-disablecache

For Fastify v3.x support, use [email protected].

Example usage

const Fastify = require("fastify");
const disableCache = require("fastify-disablecache");

const server = Fastify();
server.register(disableCache);

server.get("/", (_req, res) => {
	res.send("ok");
});

server.listen(3000, (err) => {
	if (err) throw err;
	console.log("Server listening on 3000");
});

Contributing

Contributions are welcome, and any help is greatly appreciated!

See the contributing guide for details on how to get started. Please adhere to this project's Code of Conduct when contributing.

Acknowledgements

License

fastify-disablecache is licensed under the MIT license.

fastify-disablecache's People

Contributors

dependabot[bot] avatar fdawgs avatar github-actions[bot] avatar uzlopak avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

fastify-disablecache's Issues

Add TypeScript support

Prerequisites

  • I have written a descriptive title

  • I have searched existing feature requests to ensure it has not already been proposed

  • I agree to follow the Code of Conduct that this project adheres to

Description

For posterity, TypeScript support should be added.
This will open this plugin up to more users.

Just use `no-store`

Prerequisites

  • I have written a descriptive issue title

  • I have searched existing issues to ensure it has not already been reported

  • I agree to follow the Code of Conduct that this project adheres to

API/app/plugin version

all

Node.js version

all

Operating system

Linux

Operating system version (i.e. 20.04, 11.3, 10)

all

Description

Hi Team.

Recentry I rewrited https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control section which linked by README. under reviewing of HTTP experts (chair of HTTP working group).

I rewirted misunderstanding of "don't cache". just use no-store.

But if you have some evidence of no-store does not works as expected. I wanna seriously know the case.

(FYI: original implementation of helmetjs author also doesn't has evidence of realworld problem helmetjs/nocache#19 (comment))

Below are my thought for this library. Any commnets are welcome.


from the point of standards view.

If you wanna "don't store this response to any caches", just add no-store.

Cache-Control: no-store, max-age=0, must-revalidate

in this line, no-store is most restrictive directives and others are ignored. just wast of bytes.
if implementation respect others, max-age=0, must-revalidate means "allow to store but revalidate after being stale", so it allows store to the cache.

Pragma: no-cache

Pragma is deprecated for now. and it's for Request header, not for Response.
https://httpwg.org/http-core/draft-ietf-httpbis-cache-latest.html#rfc.section.5.4

Expires: 0

Expire is ignored once Cache-Control exists. But if it works, it requires Date formatted value.
Once the value is invalid format, it's ignored. so 0 is valid for current spec. But I feel it's better to add valid date but past when you think it required (I don't think so).

So for now, below are reasonable.

Surrogate-Control: no-store
Cache-Control: no-store

(I don't think Surrogate-Control are required, because Cache-Control could cover it)

Steps to Reproduce

N/A

Expected Behaviour

No response

Update header justifications

  • Mention backwards compat with old browsers for cache-control
  • Remove links to MDN and use direct links to spec where possible

add must-revalidate to Cache-Control header

Is your feature request related to a problem? Please describe.
Yes. When using max-age=0 without must-revalidate, then the server may serve stale resource if the server is down or loses connectivity.

Describe the solution you'd like
Add must-revalidate to the Cache-Control header.

Describe alternatives you've considered
None.

Additional context
None.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.