<!DOCTYPE html> <html> <head> <title>SVR.JS 3.13.0</title> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta charset="UTF-8" /> <style> body { font-family: FreeSans, Helvetica, Tahoma, Arial, sans-serif; text-align: center; } </style> </head> <body> <h1>Welcome to SVR.JS 3.13.0</h1> <br/> <img src="/logo.png" style="width: 256px;" /> <br/> <p>If you see this page that means that the server is working properly. You can further configure the server and replace <i>index.html</i> and <i>tests.html</i> pages with custom ones.</p> <p>Default <i>config.json</i> looks like this:</p> <div style="background-color: #e0e0e0; padding: 5px; text-align: left; display: inline-block;"> <code> {<br/> "users": [],<br/> "port": 80,<br/> "pubport": 80,<br/> "page404": "404.html",<br/> "timestamp": 1701600932028,<br/> "blacklist": [],<br/> "nonStandardCodes": [],<br/> "enableCompression": true,<br/> "customHeaders": {},<br/> "enableHTTP2": false,<br/> "enableLogging": true,<br/> "enableDirectoryListing": true,<br/> "enableDirectoryListingWithDefaultHead": false,<br/> "serverAdministratorEmail": "[no contact information]",<br/> "stackHidden": false,<br/> "enableRemoteLogBrowsing": false,<br/> "exposeServerVersion": true,<br/> "disableServerSideScriptExpose": true,<br/> "rewriteMap": [<br/> {<br/> "definingRegex": "/^\\/serverSideScript\\.js(?:$|[#?])/",<br/> "replacements": [<br/> {<br/> "regex": "/^\\/serverSideScript\\.js($|[#?])/",<br/> "replacement": "/NONEXISTENT_PAGE$1"<br/> }<br/> ]<br/> },<br/> {<br/> "definingRegex": "/^\\/invoke500\\/\\?/",<br/> "replacements": [<br/> {<br/> "regex": "/\\/invoke500\\/\\?/",<br/> "replacement": "/invoke500.svr?"<br/> }<br/> ]<br/> },<br/> {<br/> "definingRegex": "/^\\/invoke500\\/.+\\//",<br/> "replacements": [<br/> {<br/> "regex": "/\\/\\?/",<br/> "replacement": "&"<br/> },<br/> {<br/> "regex": "/invoke500\\//",<br/> "replacement": "invoke500.svr?"<br/> },<br/> {<br/> "regex": "/\\/(?!invoke500.svr?)/",<br/> "replacement": ""<br/> }<br/> ]<br/> },<br/> {<br/> "definingRegex": "/^\\/invoke500\\/.+/",<br/> "replacements": [<br/> {<br/> "regex": "/\\?/",<br/> "replacement": "&"<br/> },<br/> {<br/> "regex": "/invoke500\\//",<br/> "replacement": "invoke500.svr?"<br/> }<br/> ]<br/> },<br/> {<br/> "definingRegex": "/^\\/invoke500\\//",<br/> "replacements": [<br/> {<br/> "regex": "/\\/invoke500\\//",<br/> "replacement": "/invoke500.svr"<br/> }<br/> ]<br/> },<br/> {<br/> "definingRegex": "/^\\/invoke500$/",<br/> "replacements": [<br/> {<br/> "regex": "/\\/invoke500/",<br/> "replacement": "/invoke500.svr"<br/> }<br/> ]<br/> }<br/> ],<br/> "allowStatus": true,<br/> "dontCompress": [<br/> "/.*\\.ipxe$/",<br/> "/.*\\.img$/",<br/> "/.*\\.iso$/",<br/> "/.*\\.png$/",<br/> "/.*\\.jpg$/",<br/> "/.*\\.webp$/"<br/> ],<br/> "enableIPSpoofing": true,<br/> "secure": false,<br/> "sni": {},<br/> "disableNonEncryptedServer": false,<br/> "disableToHTTPSRedirect": false,<br/> "enableETag": true,<br/> "disableUnusedWorkerTermination": false,<br/> "rewriteDirtyURLs": true,<br/> "errorPages": [],<br/> "useWebRootServerSideScript": true,<br/> "exposeModsInErrorPages": true,<br/> "disableTrailingSlashRedirects": false,<br/> "environmentVariables": {}<br/> } </code> </div> <p>Changes:</p> <ul> <li>Added support for skipping URL rewriting, when the URL refers to a file or a directory.</li> <li>Dropped support for svrmodpack.</li> <li>Added support for 307 and 308 redirects (both in config.json and in redirect() SVR.JS API method).</li> <li>Mitigated log file injection vulnerability for HTTP authentication.</li> <li>Mitigated log file injection vulnerability for SVR.JS mod file names.</li> <li>SVR.JS no longer crashes, when access to a log file is denied.</li> </ul> <br/> <a href="/tests.html">Tests</a><br/> <a href="/licenses">Licenses</a><br/> <a href="/svrjsstatus.svr">SVR.JS status page</a><br/> <a href="https://svrjs.org/docs">More Information</a> <br/> <br/> <img src="/powered.png" /> </body> </html>