sjs_status-codes-test-server.sjs (2312B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 "use strict"; 4 5 function handleRequest(request, response) { 6 response.processAsync(); 7 8 const params = request.queryString.split("&"); 9 const status = params.filter(s => s.includes("sts="))[0].split("=")[1]; 10 const cached = params.filter(s => s === "cached").length !== 0; 11 12 let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); 13 timer.initWithCallback( 14 () => { 15 // to avoid garbage collection 16 timer = null; 17 switch (status) { 18 case "100": 19 response.setStatusLine( 20 request.httpVersion, 21 101, 22 "Switching Protocols" 23 ); 24 break; 25 case "200": 26 response.setStatusLine(request.httpVersion, 202, "Created"); 27 break; 28 case "300": 29 response.setStatusLine(request.httpVersion, 303, "See Other"); 30 break; 31 case "304": 32 response.setStatusLine(request.httpVersion, 304, "Not Modified"); 33 break; 34 case "400": 35 response.setStatusLine(request.httpVersion, 404, "Not Found"); 36 break; 37 case "500": 38 response.setStatusLine(request.httpVersion, 501, "Not Implemented"); 39 break; 40 case "ok": 41 response.setStatusLine(request.httpVersion, 200, "OK"); 42 break; 43 case "redirect": 44 response.setStatusLine(request.httpVersion, 301, "Moved Permanently"); 45 response.setHeader("Location", "http://example.com/redirected"); 46 break; 47 } 48 49 if (!cached) { 50 response.setHeader( 51 "Cache-Control", 52 "no-cache, no-store, must-revalidate" 53 ); 54 response.setHeader("Pragma", "no-cache"); 55 response.setHeader("Expires", "0"); 56 } else { 57 response.setHeader( 58 "Cache-Control", 59 "no-transform,public,max-age=300,s-maxage=900" 60 ); 61 response.setHeader("Expires", "Thu, 01 Dec 2100 20:00:00 GMT"); 62 } 63 64 response.setHeader("Content-Type", "text/plain; charset=utf-8", false); 65 response.write("Hello status code " + status + "!"); 66 response.finish(); 67 }, 68 10, 69 Ci.nsITimer.TYPE_ONE_SHOT 70 ); // Make sure this request takes a few ms. 71 }