web-status-codes
Version:
Details status codes for HTTP and related protocols
148 lines (135 loc) • 7.46 kB
JavaScript
/**
* Constants enumerating the HTTP status codes.
*
* All status codes defined in RFC1945 (HTTP/1.0, RFC2616 (HTTP/1.1),
* RFC2518 (WebDAV), RFC6585 (Additional HTTP Status Codes), and
* RFC7538 (Permanent Redirect) are supported.
*
* Based on the org.apache.commons.httpclient.HttpStatus Java API.
*
* Ported by Bryce Neal.
*/
protocols = require('./protocols');
var statusCodes = {},
defaultProtocol = protocols.constants.HTTP11
statusCodes[exports.CONTINUE = 100] = "Continue";
statusCodes[exports.SWITCHING_PROTOCOLS = 101] = "Switching Protocols";
statusCodes[exports.PROCESSING = 102] = "Processing";
statusCodes[exports.EARLY_HINTS = 103] = "Early Hints";
statusCodes[exports.OK = 200] = "OK";
statusCodes[exports.CREATED = 201] = "Created";
statusCodes[exports.ACCEPTED = 202] = "Accepted";
statusCodes[exports.NON_AUTHORITATIVE_INFORMATION = 203] = "Non Authoritative Information";
statusCodes[exports.NO_CONTENT = 204] = "No Content";
statusCodes[exports.RESET_CONTENT = 205] = "Reset Content";
statusCodes[exports.PARTIAL_CONTENT = 206] = "Partial Content";
statusCodes[exports.MULTI_STATUS = 207] = "Multi-Status";
statusCodes[exports.ALREADY_REPORTED = 208] = "Already Reported"
statusCodes[exports.IM_USED = 226] = "IM Used";
statusCodes[exports.MULTIPLE_CHOICES = 300] = "Multiple Choices";
statusCodes[exports.MOVED_PERMANENTLY = 301] = "Moved Permanently";
statusCodes[exports.MOVED_TEMPORARILY = 302] = "Moved Temporarily";
statusCodes[exports.SEE_OTHER = 303] = "See Other";
statusCodes[exports.NOT_MODIFIED = 304] = "Not Modified";
statusCodes[exports.USE_PROXY = 305] = "Use Proxy";
statusCodes[exports.TEMPORARY_REDIRECT = 307] = "Temporary Redirect";
statusCodes[exports.PERMANENT_REDIRECT = 308] = "Permanent Redirect";
statusCodes[exports.BAD_REQUEST = 400] = "Bad Request";
statusCodes[exports.UNAUTHORIZED = 401] = "Unauthorized";
statusCodes[exports.PAYMENT_REQUIRED = 402] = "Payment Required";
statusCodes[exports.FORBIDDEN = 403] = "Forbidden";
statusCodes[exports.NOT_FOUND = 404] = "Not Found";
statusCodes[exports.METHOD_NOT_ALLOWED = 405] = "Method Not Allowed";
statusCodes[exports.NOT_ACCEPTABLE = 406] = "Not Acceptable";
statusCodes[exports.PROXY_AUTHENTICATION_REQUIRED = 407] = "Proxy Authentication Required";
statusCodes[exports.REQUEST_TIMEOUT = 408] = "Request Timeout";
statusCodes[exports.CONFLICT = 409] = "Conflict";
statusCodes[exports.GONE = 410] = "Gone";
statusCodes[exports.LENGTH_REQUIRED = 411] = "Length Required";
statusCodes[exports.PRECONDITION_FAILED = 412] = "Precondition Failed";
statusCodes[exports.REQUEST_TOO_LONG = 413] = "Request Entity Too Large";
statusCodes[exports.REQUEST_URI_TOO_LONG = 414] = "Request-URI Too Long";
statusCodes[exports.UNSUPPORTED_MEDIA_TYPE = 415] = "Unsupported Media Type";
statusCodes[exports.REQUESTED_RANGE_NOT_SATISFIABLE = 416] = "Requested Range Not Satisfiable";
statusCodes[exports.EXPECTATION_FAILED = 417] = "Expectation Failed";
statusCodes[exports.IM_A_TEAPOT = 418] = "I'm a teapot";
statusCodes[exports.INSUFFICIENT_SPACE_ON_RESOURCE = 419] = "Insufficient Space on Resource";
statusCodes[exports.ENHANCE_YOUR_CALM = 420] = "Enhance your calm";
statusCodes[exports.MISDIRECTED_REQUEST = 421] = "Misdirected Request";
statusCodes[exports.UNPROCESSABLE_ENTITY = 422] = "Unprocessable Entity";
statusCodes[exports.LOCKED = 423] = "Locked";
statusCodes[exports.FAILED_DEPENDENCY = 424] = "Failed Dependency";
statusCodes[exports.UPGRADE_REQUIRED = 426] = "Upgrade Required";
statusCodes[exports.PRECONDITION_REQUIRED = 428] = "Precondition Required";
statusCodes[exports.TOO_MANY_REQUESTS = 429] = "Too Many Requests";
statusCodes[exports.REQUEST_HEADER_FIELDS_TOO_LARGE = 431] = "Request Header Fields Too Large";
statusCodes[exports.NO_RESPONSE = 444] = "No Response";
statusCodes[exports.RETRY_WITH = 449] = "Retry With";
statusCodes[exports.BLOCKED_BY_PARENTAL_CONTROLS = 450] = "Blocked by Windows Parental Controls";
statusCodes[exports.UNAVAILABLE_FOR_LEGAL_REASONS = 451] = "Unavailable For Legal Reasons";
statusCodes[exports.SSL_CERTIFICATE_ERROR = 495] = "SSL Certificate Error"
statusCodes[exports.SSL_CERTIFICATE_REQUIRED = 496] = "SSL Certificate Required"
statusCodes[exports.HTTP_REQUEST_TO_HTTPS_PORT = 497] = "HTTP Request Sent to HTTPS Port"
statusCodes[exports.CLIENT_CLOSED_REQUEST = 499] = "Client Closed Request";
statusCodes[exports.INTERNAL_SERVER_ERROR = 500] = "Server Error";
statusCodes[exports.NOT_IMPLEMENTED = 501] = "Not Implemented";
statusCodes[exports.BAD_GATEWAY = 502] = "Bad Gateway";
statusCodes[exports.SERVICE_UNAVAILABLE = 503] = "Service Unavailable";
statusCodes[exports.GATEWAY_TIMEOUT = 504] = "Gateway Timeout";
statusCodes[exports.HTTP_VERSION_NOT_SUPPORTED = 505] = "HTTP Version Not Supported";
statusCodes[exports.VARIANT_ALSO_NEGOTIATES = 506] = "Variant Also Negotiates";
statusCodes[exports.INSUFFICIENT_STORAGE = 507] = "Insufficient Storage";
statusCodes[exports.LOOP_DETECTED = 508] = "Loop Detected";
statusCodes[exports.BANDWIDTH_LIMIT_EXCEEDED = 509] = "Bandwidth Limit Exceeded";
statusCodes[exports.NOT_EXTENDED = 510] = "Not Extended";
statusCodes[exports.NETWORK_AUTHENTICATION_REQUIRED = 511] = "Network Authentication Required";
statusCodes[exports.NETWORK_READ_TIMEOUT = 598] = "Network Read Timeout Error";
statusCodes[exports.NETWORK_CONNECT_TIMEOUT = 599] = "Network Connect Timeout Error";
statusCodes[exports.INFORMATION = '1xx'] = "Information";
statusCodes[exports.SUCCESS = '2xx'] = "Success";
statusCodes[exports.REDIRECTION = '3xx'] = "Redirection";
statusCodes[exports.CLIENT_ERROR = '4xx'] = "Client Error";
statusCodes[exports.SERVER_ERROR = '5xx'] = "Server Error";
exports.constants = protocols.constants;
exports.setDefaultProtocol = function (protocol) {
if (protocols.hasOwnProperty(protocol)) {
defaultProtocol = protocol;
} else {
throw new Error("Protocol is not supported: " + protocol);
}
}
/**
* @method getStatusDetails
* Return details of the status code.
* @param {Number} statusCode - the status to look up
* @param {String} [protocol = defaultProtocol] the protocol to look up the standard for.
*/
exports.getStatusDetails = function(statusCode, protocol) {
protocol | (protocol = defaultProtocol);
if (protocols[protocol].codes.hasOwnProperty(statusCode)) {
result = {
code: statusCode,
text: exports.getStatusText(statusCode), // throws error if status code does not exist
series: (Math.floor(statusCode / 100)) + 'xx',
rfc: protocols[protocol].codes[statusCode]
};
result.series = result.series + ' ' + statusCodes[result.series];
return result;
} else {
throw new Error("Status code " + statusCode + " does not exist in protocol " + protocol);
}
}
/**
* @method getStatusText
* Return details of the status code. Throws if the status code is not part of the protocol.
* @param {Number} statusCode - the status to look up
* @param {String} [protocol = defaultProtocol] the protocol to look up the text for.
*/
exports.getStatusText = function(statusCode, protocol) {
protocol | (protocol = defaultProtocol);
if (protocols[protocol].codes.hasOwnProperty(statusCode)) {
return statusCodes[statusCode];
} else {
throw new Error("Status code " + statusCode + " does not exist in protocol " + protocol);
}
};