early_hint_pixel.sjs (1202B)
1 "use strict"; 2 3 function handleRequest(request, response) { 4 response.setHeader("Content-Type", "image/png", false); 5 response.setHeader("Cache-Control", "max-age=604800", false); 6 7 // the typo in "Referer" is part of the http spec 8 if (request.hasHeader("Referer")) { 9 setSharedState("requestReferrer", request.getHeader("Referer")); 10 } else { 11 setSharedState("requestReferrer", ""); 12 } 13 14 let count = JSON.parse(getSharedState("earlyHintCount")); 15 let image; 16 // send different sized images depending whether this is an early hint request 17 if ( 18 request.hasHeader("X-Moz") && 19 request.getHeader("X-Moz") === "early hint" 20 ) { 21 count.hinted += 1; 22 // set to green/black horizontal stripes (71 bytes) 23 image = atob( 24 "iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAADklEQVQIW2OU+i/FAAcADoABNV8X" + 25 "GBMAAAAASUVORK5CYII=" 26 ); 27 } else { 28 count.normal += 1; 29 // set to purple/white checkered pattern (76 bytes) 30 image = atob( 31 "iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAIAAAD91JpzAAAAE0lEQVQIW2P4//+/N8MkBiAGsgA1" + 32 "bAe1SzDY8gAAAABJRU5ErkJggg==" 33 ); 34 } 35 setSharedState("earlyHintCount", JSON.stringify(count)); 36 response.write(image); 37 }