I'm not sure if someone else has contributed something similar, but here's a patch for Protocols.HTTP.Server.Request that provides more informative response codes for almost all of the HTTP responses in widespread use (present in RFCs or not).
--- lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/Request.pike.orig Wed Dec 9 16:32:20 2009 +++ lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/Request.pike Wed Oct 12 16:46:19 2011 @@ -31,6 +31,79 @@ // finalize
+constant errors= +([ + // Informational + 100:"100 Continue", + 101:"101 Switching Protocols", + 102:"102 Processing", // WebDAV + 103:"103 Checkpoint", + 122:"122 Request-URI too long", // a non standard IE7 error + + // Successful + 200:"200 OK", + 201:"201 Created, URI follows", + 202:"202 Accepted", + 203:"203 Non-Authoritative Information", + 204:"204 No Content", + 205:"205 Reset Content", + 206:"206 Partial Content", // Byte ranges + 207:"207 Multi-Status", // WebDAV + 226:"226 IM Used", // RFC 3229 + + // Redirection + 300:"300 Moved", + 301:"301 Permanent Relocation", + 302:"302 Found", // a potential alligator swamp. for HTTP/1.1, use 303/307. + 303:"303 See Other", // temporary redirect, any POST data is received, use GET. + 304:"304 Not Modified", + 305:"305 Use Proxy", + 306:"306 Switch Proxy", // Deprecated + 307:"307 Temporary Redirect", // retry request elsewhere, don't change method. + 308:"308 Resume Incomplete", + + // Client Error + 400:"400 Bad Request", + 401:"401 Access denied", + 402:"402 Payment Required", + 403:"403 Forbidden", + 404:"404 No such file or directory.", + 405:"405 Method not allowed", + 406:"406 Not Acceptable", + 407:"407 Proxy authorization needed", + 408:"408 Request timeout", + 409:"409 Conflict", + 410:"410 Gone", + 411:"411 Length Required", + 412:"412 Precondition Failed", + 413:"413 Request Entity Too Large", + 414:"414 Request-URI Too Large", + 415:"415 Unsupported Media Type", + 416:"416 Requested range not statisfiable", + 417:"417 Expectation Failed", + 418:"418 I'm a teapot", // Ha ha + 422:"422 Unprocessable Entity", // WebDAV + 423:"423 Locked", // WebDAV + 424:"424 Failed Dependency", // WebDAV + 425:"425 Unordered Collection", // RFC3648 + 426:"426 Upgrade Required", // RFC2817 + + // Internal Server Errors + 500:"500 Internal Server Error.", + 501:"501 Not Implemented", + 502:"502 Bad Gateway", + 503:"503 Service unavailable", + 504:"504 Gateway Timeout", + 505:"505 HTTP Version Not Supported", + 506:"506 Variant Also Negotiates", // RFC2295 + 507:"507 Insufficient Storage", // WebDAV / RFC4918 + 509:"509 Bandwidth Limit Exceeded", // An Apache defined extension in popular use + 510:"510 Not Extended", // RFC2774 + 598:"598 Network read timeout error", // Informal extension used by some HTTP proxies + 599:"599 Network connect timeout error", // Informal extension used by some HTTP proxies +]); + + int max_request_size = 0;
void set_max_request_size(int size) @@ -475,15 +548,12 @@ m->error=206; } break; - case 302: - res+=({protocol+" 302 TEMPORARY REDIRECT"}); - break; - case 304: - res+=({protocol+" 304 Not Modified"}); - break; default: // better error names? - res+=({protocol+" "+m->error+" ERROR"}); + if(errors[(int)m->error]) + res+=({protocol+" " + errors[(int)m->error]}); + else + res+=({protocol+" "+m->error+" ERROR"}); break; }