diff --git a/dist/presets/cloudflare/runtime/cloudflare-module.mjs b/dist/presets/cloudflare/runtime/cloudflare-module.mjs
index b88f2c696af1617f0095105384d67cbe09a2b541..5f2d1ad0d8b42c8f468e1d0398ed21b0bc9e3a51 100644
--- a/dist/presets/cloudflare/runtime/cloudflare-module.mjs
+++ b/dist/presets/cloudflare/runtime/cloudflare-module.mjs
@@ -5,7 +5,7 @@ import { isPublicAssetURL } from "#nitro-internal-virtual/public-assets";
 import { createHandler } from "./_module-handler.mjs";
 const nitroApp = useNitroApp();
 const ws = import.meta._websocket ? wsAdapter(nitroApp.h3App.websocket) : void 0;
-export default createHandler({
+const handler = createHandler({
   fetch(request, env, context, url) {
     if (env.ASSETS && isPublicAssetURL(url.pathname)) {
       return env.ASSETS.fetch(request);
@@ -15,3 +15,40 @@ export default createHandler({
     }
   }
 });
+// Override fetch handler to use Cloudflare Cache API
+export default {
+  ...handler,
+  async fetch(request, env, context) {
+    const cacheUrl = new URL(request.url);
+
+    // Construct the cache key from the cache URL
+    const cacheKey = new Request(cacheUrl.toString(), request);
+    const cache = caches.default;
+
+    // Check whether the value is already available in the cache
+    // if not, you will need to fetch it from origin, and store it in the cache
+    let response = await cache.match(cacheKey);
+
+    if (!response) {
+      console.log(
+        `Response for request url: ${request.url} not present in cache. Fetching and caching request.`,
+      );
+      // If not in cache, get it from origin
+      response = await handler.fetch(request, env, context);
+
+      // Must use Response constructor to inherit all of response's fields
+      response = new Response(response.body, response);
+
+      // Cache API respects Cache-Control headers. Setting s-max-age to 10
+      // will limit the response to be in cache for 10 seconds max
+
+      // Any changes made to the response here will be reflected in the cached value
+      response.headers.append("Cache-Control", "s-maxage=10");
+
+      context.waitUntil(cache.put(cacheKey, response.clone()));
+    } else {
+      console.log(`Cache hit for: ${request.url}.`);
+    }
+    return response;
+  }
+};
