// Server handler that counts requests per key and serves responses // with configurable cache headers. Used to test prefetch cache behavior // for bug 1527334. function handleRequest(request, response) { let params = new URLSearchParams(request.queryString); let key = params.get("key") || "default"; let mode = params.get("mode") || "content"; if (mode === "count") { response.setStatusLine(request.httpVersion, 200, "OK"); response.setHeader("Content-Type", "text/plain", false); response.setHeader("Cache-Control", "no-store", false); let count = getSharedState(key) || "0"; response.write(count); return; } if (mode === "reset") { setSharedState(key, "0"); response.setStatusLine(request.httpVersion, 200, "OK"); response.setHeader("Content-Type", "text/plain", false); response.setHeader("Cache-Control", "no-store", false); response.write("reset"); return; } // Content mode: increment counter and serve response let count = parseInt(getSharedState(key) || "0") + 1; setSharedState(key, count.toString()); response.setStatusLine(request.httpVersion, 200, "OK"); let contentType = params.get("type") || "text/html"; response.setHeader("Content-Type", contentType, false); let cacheControl = params.get("cache-control"); if (cacheControl) { response.setHeader("Cache-Control", cacheControl, false); } // If no cache-control param, deliberately omit Cache-Control header // to simulate the bug 1527334 scenario. if (contentType === "application/javascript") { response.write("// prefetched script " + count); } else { response.write( "Prefetched content " + count + "" ); } }