AWS ALBに長いリクエストURLでGETすると414や500でエラーになる

AWS ALB(Application Load Balancer)に長いURLリクエスト投げてみたら、以下のテーブルのように、ある長さのリクエストからエラーが出ることを発見しました。

URLの長さ(Byte) HTTPレスポンスコード
〜16446 200 OK
16447 500 Internal Server Error
16448〜 414 Request-URI Too Large

AWSのサポートに聞いたら以下のような制限があることを教えてもらいました。仕様なのでパラメータ等での変更はできないようです。また、旧ELB(Classic Load Balancer)にはこの制限が無いようです。

HTTP headers for Application Load Balancers have the following size limits:

Request line: 16K

Single header: 16K

Whole header: 64K

How Elastic Load Balancing Works - Elastic Load Balancing

なおApacheやNginxにもそれぞれ同様の制限項目があります。もしどうしても長いGETリクエスト受けたければALB配下のEC2側も設定を確認しておいた方が良いと思います。

Apache
LimitRequestLine 8190

https://httpd.apache.org/docs/2.4/ja/mod/core.html#limitrequestline

Nginx
large_client_header_buffers 4 8k;
client_header_buffer_size 1k;

http://nginx.org/en/docs/http/ngx_http_core_module.html