]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: http: Add support for http 413 status
authorAnthonin Bonnefoy <anthonin.bonnefoy@datadoghq.com>
Mon, 22 Jun 2020 07:17:01 +0000 (09:17 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 26 Jun 2020 09:30:02 +0000 (11:30 +0200)
Add 413 http "payload too large" status code. This will allow 413 to be
used in deny_status and errorfile.

doc/configuration.txt
include/haproxy/http-t.h
src/http.c

index 186d9a8ae9243819a23a67668532fd25d3a9d3cb..2d8e4656770aaf59dd7d3432495b69a69435daba 100644 (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
index c8bf9a30844cbd4c6b958d40051957aa7105d348..500fc46d5ccda4ae4c78bf33e26c7c56a02a1bf9 100644 (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,
index b798c5db92d2de45e278264a8220d1766ddb0d10..7278cad58887520a15cc009f19f8366c4b003744 100644 (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;