Plan your migration to the global external Application Load Balancer

If you are an existing user of the classic Application Load Balancer, make sure you review this page if you are planning to migrate to the global external Application Load Balancer or if you are planning a new deployment with the global external Application Load Balancer.

Feature differences

The following features are not supported with the global external Application Load Balancer. They are only available with the classic Application Load Balancer:

Data plane differences

The following table highlights differences in the data plane between the classic Application Load Balancer and the global external Application Load Balancer. These differences affect how the load balancers respond to some common events.

Event Classic Application Load Balancer response Global external Application Load Balancer response
Status/error codes
All backends are unhealthy Returns HTTP 502 Returns HTTP 503
Request uses a banned SSL cipher Returns HTTP 502 Returns HTTP 503
Early upstream connection reset by the backend Returns HTTP 502 Returns HTTP 503
Failed connection upgrade (for example, while upgrading to Websockets) Returns HTTP 400 Returns HTTP 403
Header is too large Returns HTTP 413 Returns HTTP 431
Quotas and limits
URL map configuration There are significant differences in the URL map configuration limits between the two load balancers. For details, see the Quotas: URL maps documentation.
Header handling
Request uses a custom HTTP method with no body Adds the Transfer Encoding: Chunked header to request sent to backend Adds the Content-Length: 0 header to request sent to backend
Format of the X-Forwarded-For header added to requests sent to backend Uses ', ' delimiter between IPs Uses ',' delimiter between IPs (no space after the comma)
Header case preservation Header case is preserved All header keys are transformed to lowercase
Repeated headers with the same name Allowed Repeated headers may be combined into a single header, with the values appended in order and comma separated, as allowed by RFC 7230.
(HTTP/1.1 only) Invalid header name (for example, unsupported characters in header) Allowed (for HTTP/1.1) Returns HTTP 502 (for HTTP/1.1)
(HTTP/1.1 only) Repeated (but same) Content-Length header in request Allowed (for HTTP/1.1) Returns HTTP 502 (for HTTP/1.1)
(HTTP/1.1 only) Multiple hosts in header When 2 or more hosts are added, and the first one is valid, the header is accepted When 2 or more hosts are added, and any are invalid, the load balancer returns HTTP 502
(HTTP/1.1 only) Connection: Keep-Alive header Adds the Keep-Alive header in requests sent to backend by default Does not add this header by default
Request handling
Backwards slashes in request URL left unchanged Converts to forward slash
Merge duplicate slashes in request Leaves slashes unmerged Merges slashes
`#` in request path Allowed Returns HTTP 400
(HTTP/1.1 only) Illegal characters in request path (for example, `\\x7f\\x7f`) Allowed (for HTTP/1.1) Returns HTTP 502 (for HTTP/1.1)
Traffic distribution (URL map configuration)
Client request includes a port number The port number is ignored even if you have configured hosts with ports in the URL map. Only the host name is considered.
For example, requests for example.com:5000 are matched to the backend service for example.com.
Both the host name and the port number are considered.
For example, requests for example.com:5000 are matched to the backend service for example.com:5000. If there isn't a match, the default backend service is used.