MINOR: http: Add support for http 413 status

Add 413 http "payload too large" status code. This will allow 413 to be
used in deny_status and errorfile.
This commit is contained in:
Anthonin Bonnefoy 2020-06-22 09:17:01 +02:00 committed by Willy Tarreau
parent 47d17182f4
commit 85048f80c9
3 changed files with 31 additions and 20 deletions

View File

@ -3927,7 +3927,7 @@ errorfile <code> <file>
Arguments :
<code> is the HTTP status code. Currently, HAProxy is capable of
generating codes 200, 400, 401, 403, 404, 405, 407, 408, 410,
425, 429, 500, 502, 503, and 504.
413, 425, 429, 500, 502, 503, and 504.
<file> designates a file containing the full HTTP response. It is
recommended to follow the common practice of appending ".http" to
@ -3976,7 +3976,7 @@ errorfiles <name> [<code> ...]
<code> is a HTTP status code. Several status code may be listed.
Currently, HAProxy is capable of generating codes 200, 400, 401,
403, 404, 405, 407, 408, 410, 425, 429, 500, 502, 503, and 504.
403, 404, 405, 407, 408, 410, 413, 425, 429, 500, 502, 503, and 504.
Errors defined in the http-errors section with the name <name> are imported
in the current proxy. If no status code is specified, all error files of the
@ -4002,7 +4002,7 @@ errorloc302 <code> <url>
Arguments :
<code> is the HTTP status code. Currently, HAProxy is capable of
generating codes 200, 400, 401, 403, 404, 405, 407, 408, 410,
425, 429, 500, 502, 503, and 504.
413, 425, 429, 500, 502, 503, and 504.
<url> it is the exact contents of the "Location" header. It may contain
either a relative URI to an error page hosted on the same site,
@ -4034,7 +4034,7 @@ errorloc303 <code> <url>
Arguments :
<code> is the HTTP status code. Currently, HAProxy is capable of
generating codes 200, 400, 401, 403, 404, 405, 407, 408, 410,
425, 429, 500, 502, 503, and 504.
413, 425, 429, 500, 502, 503, and 504.
<url> it is the exact contents of the "Location" header. It may contain
either a relative URI to an error page hosted on the same site,
@ -5009,8 +5009,8 @@ http-error status <code> [content-type <type>]
Arguments :
status <code> is the HTTP status code. It must be specified.
Currently, HAProxy is capable of generating codes
200, 400, 401, 403, 404, 405, 407, 408, 410, 425, 429,
500, 502, 503, and 504.
200, 400, 401, 403, 404, 405, 407, 408, 410, 413, 425,
429, 500, 502, 503, and 504.
content-type <type> is the response content type, for instance
"text/plain". This parameter is ignored and should be
@ -5453,22 +5453,22 @@ http-request return [status <code>] [content-type <type>]
* If "default-errorfiles" argument is set, the proxy's errorfiles are
considered. If the "status" argument is defined, it must be one of the
status code handled by hparoxy (200, 400, 403, 404, 405, 408, 410, 425,
429, 500, 502, 503, and 504). The "content-type" argument, if any, is
ignored.
status code handled by hparoxy (200, 400, 403, 404, 405, 408, 410, 413,
425, 429, 500, 502, 503, and 504). The "content-type" argument, if any,
is ignored.
* If a specific errorfile is defined, with an "errorfile" argument, the
corresponding file, containing a full HTTP response, is returned. Only the
"status" argument is considered. It must be one of the status code handled
by hparoxy (200, 400, 403, 404, 405, 408, 410, 425, 429, 500, 502, 503, and
504). The "content-type" argument, if any, is ignored.
by hparoxy (200, 400, 403, 404, 405, 408, 410, 413, 425, 429, 500, 502, 503,
and 504). The "content-type" argument, if any, is ignored.
* If an http-errors section is defined, with an "errorfiles" argument, the
corresponding file in the specified http-errors section, containing a full
HTTP response, is returned. Only the "status" argument is considered. It
must be one of the status code handled by hparoxy (200, 400, 403, 404, 405,
408, 410, 425, 429, 500, 502, 503, and 504). The "content-type" argument,
if any, is ignored.
408, 410, 413, 425, 429, 500, 502, 503, and 504). The "content-type"
argument, if any, is ignored.
* If a "file" or a "lf-file" argument is specified, the file's content is
used as the response payload. If the file is not empty, its content-type
@ -6100,22 +6100,22 @@ http-response return [status <code>] [content-type <type>]
* If "default-errorfiles" argument is set, the proxy's errorfiles are
considered. If the "status" argument is defined, it must be one of the
status code handled by hparoxy (200, 400, 403, 404, 405, 408, 410, 425,
429, 500, 502, 503, and 504). The "content-type" argument, if any, is
ignored.
status code handled by hparoxy (200, 400, 403, 404, 405, 408, 410, 413,
425, 429, 500, 502, 503, and 504). The "content-type" argument, if any,
is ignored.
* If a specific errorfile is defined, with an "errorfile" argument, the
corresponding file, containing a full HTTP response, is returned. Only the
"status" argument is considered. It must be one of the status code handled
by hparoxy (200, 400, 403, 404, 405, 408, 410, 425, 429, 500, 502, 503, and
504). The "content-type" argument, if any, is ignored.
by hparoxy (200, 400, 403, 404, 405, 408, 410, 413, 425, 429, 500, 502, 503,
and 504). The "content-type" argument, if any, is ignored.
* If an http-errors section is defined, with an "errorfiles" argument, the
corresponding file in the specified http-errors section, containing a full
HTTP response, is returned. Only the "status" argument is considered. It
must be one of the status code handled by hparoxy (200, 400, 403, 404, 405,
408, 410, 425, 429, 500, 502, 503, and 504). The "content-type" argument,
if any, is ignored.
408, 410, 413, 425, 429, 500, 502, 503, and 504). The "content-type"
argument, if any, is ignored.
* If a "file" or a "lf-file" argument is specified, the file's content is
used as the response payload. If the file is not empty, its content-type

View File

@ -90,6 +90,7 @@ enum {
HTTP_ERR_407,
HTTP_ERR_408,
HTTP_ERR_410,
HTTP_ERR_413,
HTTP_ERR_421,
HTTP_ERR_425,
HTTP_ERR_429,

View File

@ -165,6 +165,7 @@ const int http_err_codes[HTTP_ERR_SIZE] = {
[HTTP_ERR_407] = 407,
[HTTP_ERR_408] = 408,
[HTTP_ERR_410] = 410,
[HTTP_ERR_413] = 413,
[HTTP_ERR_421] = 421,
[HTTP_ERR_425] = 425,
[HTTP_ERR_429] = 429,
@ -249,6 +250,14 @@ const char *http_err_msgs[HTTP_ERR_SIZE] = {
"\r\n"
"<html><body><h1>410 Gone</h1>\nThe resource is no longer available and will not be available again.\n</body></html>\n",
[HTTP_ERR_413] =
"HTTP/1.1 413 Payload Too Large\r\n"
"Content-length: 106\r\n"
"Cache-Control: no-cache\r\n"
"Content-Type: text/html\r\n"
"\r\n"
"<html><body><h1>413 Payload Too Large</h1>\nThe request entity exceeds the maximum allowed.\n</body></html>\n",
[HTTP_ERR_421] =
"HTTP/1.1 421 Misdirected Request\r\n"
"Content-length: 104\r\n"
@ -351,6 +360,7 @@ int http_get_status_idx(unsigned int status)
case 407: return HTTP_ERR_407;
case 408: return HTTP_ERR_408;
case 410: return HTTP_ERR_410;
case 413: return HTTP_ERR_413;
case 421: return HTTP_ERR_421;
case 425: return HTTP_ERR_425;
case 429: return HTTP_ERR_429;