incremental-js-value-script.sjs (1001B)
1 "use strict"; 2 3 function handleRequest(request, response) { 4 const { queryString } = request; 5 if (queryString === "setup") { 6 setState("cache-counter", "1"); 7 setState("etag", `"${Date.now()}-${Math.round(Math.random() * 100)}"`); 8 response.setHeader("Content-Type", "text/html"); 9 response.write("OK"); 10 return; 11 } 12 13 const Etag = getState("etag"); 14 const IfNoneMatch = request.hasHeader("If-None-Match") 15 ? request.getHeader("If-None-Match") 16 : ""; 17 18 const counter = getState("cache-counter") || 1; 19 const page = "<script>var jsValue = '" + counter + "';</script>" + counter; 20 21 setState("cache-counter", "" + (parseInt(counter, 10) + 1)); 22 23 response.setHeader("Etag", Etag, false); 24 25 if (IfNoneMatch === Etag) { 26 response.setStatusLine(request.httpVersion, "304", "Not Modified"); 27 } else { 28 response.setHeader("Content-Type", "text/html; charset=utf-8", false); 29 response.setHeader("Content-Length", page.length + "", false); 30 response.write(page); 31 } 32 }