

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Cabeçalhos HTTP e Application Load Balancers
<a name="x-forwarded-headers"></a>

As solicitações HTTP e as respostas HTTP usam campos de cabeçalho para enviar informações sobre as mensagens HTTP. Os cabeçalhos HTTP são adicionados automaticamente. Os campos de cabeçalho são pares de nome-valor separados por dois pontos e separados por um retorno de carro (CR) e um avanço de linha (LF). Um conjunto padrão de campos de cabeçalho HTTP está definido na RFC 2616, [ Cabeçalhos de mensagem](https://datatracker.ietf.org/doc/html/rfc2616). Também há a disponibilidade de cabeçalhos HTTP não padrão que são adicionados automaticamente e amplamente usados pelas aplicações. Alguns dos cabeçalhos HTTP não padrão possuem um prefixo `X-Forwarded`. Os Application Load Balancers são compatíveis com os seguintes cabeçalhos `X-Forwarded`.

Para obter mais informações sobre conexões HTTP, consulte [Roteamento de solicitação](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/how-elastic-load-balancing-works.html#request-routing) no *Manual do usuário do Elastic Load Balancing*.

**Topics**
+ [X-Forwarded-For](#x-forwarded-for)
+ [X-Forwarded-Proto](#x-forwarded-proto)
+ [X-Forwarded-Port](#x-forwarded-port)

## X-Forwarded-For
<a name="x-forwarded-for"></a>

O cabeçalho da solicitação `X-Forwarded-For` ajuda você a identificar o endereço IP de um cliente quando usar um load balancer HTTP ou HTTPS. Como os balanceadores de carga interceptam o tráfego entre clientes e servidores, os logs de acesso do seu servidor vão conter apenas o endereço IP do balanceador de carga. Para ver o endereço IP do cliente, use o atributo `routing.http.xff_header_processing.mode`. Esse atributo permite que você modifique, preserve ou remova o cabeçalho `X-Forwarded-For` na solicitação HTTP antes que o Application Load Balancer envie a solicitação ao destino. Os valores possíveis para esse atributo são `append`, `preserve` e `remove`. O valor padrão desse atributo é `append`.

**Importante**  
O cabeçalho `X-Forwarded-For` deve ser usado com cuidado devido ao potencial de riscos à segurança. As entradas só podem ser consideradas confiáveis se adicionadas por sistemas devidamente protegidos na rede.

**Topics**
+ [Anexar](#x-forwarded-for-append)
+ [Preservar](#x-forwarded-for-preserve)
+ [Remover](#x-forwarded-for-remove)

### Anexar
<a name="x-forwarded-for-append"></a>

Por padrão, o Application Load Balancer armazena o endereço IP do cliente no cabeçalho de solicitação `X-Forwarded-For` e encaminha o cabeçalho para o seu servidor. Se o cabeçalho de solicitação `X-Forwarded-For` não estiver incluído na solicitação original, o balanceador de carga criará um com o endereço IP do cliente como o valor da solicitação. Caso contrário, o balanceador de carga anexará o endereço IP do cliente ao cabeçalho existente e encaminhará o cabeçalho para o seu servidor. O cabeçalho de solicitação `X-Forwarded-For` pode conter vários endereços IP separados por vírgula.

O cabeçalho de solicitação `X-Forwarded-For` leva a seguinte forma:

```
X-Forwarded-For: client-ip-address
```

Veja a seguir um exemplo de cabeçalho de solicitação `X-Forwarded-For` para um cliente com o endereço IP `203.0.113.7`.

```
X-Forwarded-For: 203.0.113.7
```

Veja a seguir um exemplo de cabeçalho de `X-Forwarded-For` solicitação para um cliente com IPv6 endereço de`2001:DB8::21f:5bff:febf:ce22:8a2e`.

```
X-Forwarded-For: 2001:DB8::21f:5bff:febf:ce22:8a2e
```

Quando o atributo de preservação da porta do cliente (`routing.http.xff_client_port.enabled`) estiver habilitado no balanceador de carga, o cabeçalho `X-Forwarded-For` da solicitação incluirá o `client-port-number` anexado ao `client-ip-address`, separado por dois pontos. Em seguida, o cabeçalho adotará a seguinte forma:

```
IPv4 -- X-Forwarded-For: client-ip-address:client-port-number
```

```
IPv6 -- X-Forwarded-For: [client-ip-address]:client-port-number
```

Pois IPv6, observe que quando o balanceador de carga anexa o `client-ip-address` ao cabeçalho existente, ele coloca o endereço entre colchetes.

Veja a seguir um exemplo de cabeçalho de `X-Forwarded-For` solicitação para um cliente com um IPv4 endereço `12.34.56.78` e um número de porta de`8080`.

```
X-Forwarded-For: 12.34.56.78:8080
```

Veja a seguir um exemplo de cabeçalho de `X-Forwarded-For` solicitação para um cliente com um IPv6 endereço `2001:db8:85a3:8d3:1319:8a2e:370:7348` e um número de porta de`8080`.

```
X-Forwarded-For: [2001:db8:85a3:8d3:1319:8a2e:370:7348]:8080
```

### Preservar
<a name="x-forwarded-for-preserve"></a>

O modo `preserve` no atributo garante que o cabeçalho `X-Forwarded-For` na solicitação HTTP não seja modificado de nenhuma forma antes do envio para os destinos.

### Remover
<a name="x-forwarded-for-remove"></a>

O modo `remove` no atributo remove o cabeçalho `X-Forwarded-For` na solicitação HTTP antes do envio para os destinos.

Se você habilitar o atributo de preservação da porta do cliente (`routing.http.xff_client_port.enabled`) e também selecionar `preserve` ou `remove` para o atributo `routing.http.xff_header_processing.mode`, o Application Load Balancer substituirá o atributo de preservação da porta do cliente. Dependendo do modo selecionado, ele mantém o cabeçalho `X-Forwarded-For` inalterado ou o remove antes de enviá-lo para os destinos.

A tabela a seguir mostra exemplos do cabeçalho `X-Forwarded-For` que o destino recebe quando você seleciona o modo `append`, `preserve` ou `remove`. Neste exemplo, o endereço IP do último salto é `127.0.0.1`. 


| Descrição da solicitação | Exemplo de solicitação | append | preserve | remove | 
| --- | --- | --- | --- | --- | 
| A solicitação é enviada sem cabeçalho XFF. | GET /index.html HTTP/1.1 Host: example.com | X-Forwarded-For: 127.0.0.1 | Não está presente | Não está presente | 
| A solicitação é enviada com um cabeçalho XFF e um endereço IP do cliente. | GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.4 | X-Forwarded-For: 127.0.0.4, 127.0.0.1 | X-Forwarded-For: 127.0.0.4 | Não está presente | 
| A solicitação é enviada com um cabeçalho XFF e vários endereços IP do cliente. | GET /index.html HTTP/1.1 Host: example.com X-Forwarded-For: 127.0.0.4, 127.0.0.8 | X-Forwarded-For: 127.0.0.4, 127.0.0.8, 127.0.0.1 | X-Forwarded-For: 127.0.0.4, 127.0.0.8 | Não está presente | 

------
#### [ Console ]

**Para gerenciar o cabeçalho X-Forwarded-For**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. No painel de navegação, selecione **Balanceador de carga**.

1. Selecione o load balancer.

1. Na guia **Atributos**, escolha **Editar**.

1. **Na seção **Configuração de tráfego**, em **Tratamento de pacotes**, para **X-Forwarded-For cabeçalho**, escolha **Anexar** (padrão), **Preservar** ou Remover.**

1. Escolha **Salvar alterações**.

------
#### [ AWS CLI ]

**Para gerenciar o cabeçalho X-Forwarded-For**  
Use o comando [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) com o atributo `routing.http.xff_header_processing.mode`. Os valores possíveis são `append`, `preserve` e `remove`. O padrão é `append`.

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes "Key=routing.http.xff_header_processing.mode,Value=preserve"
```

------
#### [ CloudFormation ]

**Para gerenciar o cabeçalho X-Forwarded-For**  
Atualize o [AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html)recurso para incluir o `routing.http.xff_header_processing.mode` atributo. Os valores possíveis são `append`, `preserve` e `remove`. O padrão é `append`.

```
Resources:
  myLoadBalancer:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      Name: my-alb
      Type: application
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "routing.http.xff_header_processing.mode"
          Value: "preserve"
```

------

## X-Forwarded-Proto
<a name="x-forwarded-proto"></a>

O cabeçalho da solicitação `X-Forwarded-Proto` ajuda você a identificar o protocolo (HTTP ou HTTPS) que um cliente usou para se conectar ao seu load balancer. Os logs de acesso do servidor contêm apenas o protocolo usado entre o servidor e o load balancer; eles não contêm informações sobre o protocolo usado entre o cliente e o load balancer. Para determinar o protocolo usado entre o cliente e o balanceador de carga, use o cabeçalho de solicitação `X-Forwarded-Proto`. O Elastic Load Balancing armazena o protocolo usado entre o cliente e o balanceador de carga no cabeçalho da solicitação `X-Forwarded-Proto` e encaminha o cabeçalho para seu servidor.

O aplicativo ou o site podem usar o protocolo armazenado no cabeçalho da solicitação `X-Forwarded-Proto` para renderizar uma resposta que redireciona para o URL apropriado.

O cabeçalho de solicitação `X-Forwarded-Proto` leva a seguinte forma:

```
X-Forwarded-Proto: originatingProtocol
```

O exemplo a seguir contém um cabeçalho de solicitação `X-Forwarded-Proto` para uma solicitação originada do cliente como solicitação de HTTPS:

```
X-Forwarded-Proto: https
```

## X-Forwarded-Port
<a name="x-forwarded-port"></a>

O cabeçalho de solicitação `X-Forwarded-Port` ajuda a identificar a porta de destino que o cliente usou para se conectar ao load balancer.