
Security News
Crates.io Users Targeted by Phishing Emails
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
next-cache-effective-pages
Advanced tools
A helper for creating cache-effective Next.js server-side-rendered pages with minimal effort
Let's say you want to re-generate a static file (e.g. public/sitemap.xml) every 15 minutes.
The first solution that comes to mind is doing this at build time and it's great and simple, but.... it wouldn't work for mid and big-scale applications (considering that you're rebuilding your app every time there's a change in CMS).
And this is where next-cache-effective-pages
comes into the picture.
It makes it easier to change your static file into a regeneratable page without you worrying about effective caching and bandwidth attacks.
$ npm i --save next-cache-effective-pages
# or
$ yarn add next-cache-effective-pages
export default function Sitemap() {}
export async function getServerSideProps(ctxt) {
return withCacheEffectivePage(async ({ res }) => {
res.setHeader('Content-Type', 'text/xml')
res.write(await getAllPosts())
res.end()
})({...ctxt, options: { secondsBeforeRevalidation: 60 * 15 } }) // Re-generate the page every 15 minutes
}
export default function Sitemap() {}
export async function getServerSideProps(ctxt) {
return withCacheEffectivePage(async ({ res, query }) => {
const maxPages = await getMaxPages()
if (query.page > maxPages) {
// redirect to last
}
res.setHeader('Content-Type', 'text/xml')
res.write(await getPostsByPage(query.page))
res.end()
})({ ...ctxt, options: { secondsBeforeRevalidation: 60 * 15, allowedQueryParams: ["page"] } }) // You can whitelist a query parameter
}
{
secondsBeforeRevalidation?: number; # Self-descriptive
allowedQueryParams?: string[]; # These won't be removed from the url while redirecting
}
The easiest way to attack an app's bandwidth quota is by adding the current timestamp to a request, like so:
$ curl -s -I -X GET "https://bstefanski.com/sitemap.xml?$(date +%s)"
If your site is server-side rendered it will probably miss the cached entry and create a new one.
This library prevents from returning an uncached big chunk of data by redirecting to a query-less url (https://bstefanski.com/sitemap.xml?43534543=0
-> https://bstefanski.com/sitemap.xml
)
By setting Cache-Control
header to s-maxage=${secondsBeforeRevalidation}, stale-while-revalidate
.
stale-while-revalidate
- Indicates the client will accept a stale response, while asynchronously checking in the background for a fresh one.
FAQs
A helper for creating cache-effective Next.js server-side-rendered pages with minimal effort
We found that next-cache-effective-pages demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
Product
Socket now lets you customize pull request alert headers, helping security teams share clear guidance right in PRs to speed reviews and reduce back-and-forth.
Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.