Noções básicas das políticas de cabeçalhos de resposta - Amazon CloudFront

Noções básicas das políticas de cabeçalhos de resposta

Você pode usar uma política de cabeçalhos de resposta para especificar os cabeçalhos HTTP que o Amazon CloudFront remove ou adiciona às respostas enviadas aos visualizadores. Para obter mais informações sobre políticas de cabeçalhos de respostas e os motivos para usá-las, consulte Adicionar ou remover cabeçalhos HTTP em respostas do CloudFront com uma política.

Os tópicos a seguir explicam as configurações em uma política de cabeçalhos de resposta. As configurações são agrupadas em categorias, que são representadas nos tópicos a seguir.

Detalhes da política (metadados)

As configurações de detalhes da política contêm metadados sobre uma política de cabeçalhos de resposta.

  • Name (Nome): um nome para identificar a política dos cabeçalhos de resposta. No console, você usa o nome para anexar a política a um comportamento de cache.

  • Description (Descrição, opcional): um comentário para descrever a política dos cabeçalhos de resposta. Isso é opcional, mas pode ajudar a identificar a finalidade da política.

Cabeçalhos de CORS

As configurações de compartilhamento de recursos entre origens (CORS) permitem adicionar e configurar cabeçalhos de CORS em uma política de cabeçalhos de resposta.

Essa lista se concentra em como especificar as configurações e os valores válidos em uma política de cabeçalhos de resposta. Para obter mais informações sobre cada um desses cabeçalhos e como eles são usados para solicitações e respostas de CORS do mundo real, consulte compartilhamento de recursos entre origens no MDN Web Docs e a Especificação do protocolo CORS.

Access-Control-Allow-Credentials

Essa é uma configuração booleana (true ou false) que determina se o CloudFront adiciona o cabeçalho Access-Control-Allow-Credentials em respostas às solicitações de CORS. Quando essa configuração for definida como true, o CloudFront adicionará o cabeçalho Access-Control-Allow-Credentials: true em respostas às solicitações do CORS. Caso contrário, o CloudFront não adicionará esse cabeçalho às respostas.

Access-Control-Allow-Headers

Especifica os nomes de cabeçalho que o CloudFront usa como valores para o cabeçalho Access-Control-Allow-Headers em respostas às solicitações de comprovação de CORS. Os valores válidos para essa configuração incluem nomes de cabeçalho HTTP ou o caractere curinga (*), que indica que todos os cabeçalhos são permitidos.

nota

O cabeçalho Authorization não pode usar um caractere curinga e deve ser listado explicitamente.

Exemplos de uso válido do caractere curinga
Exemplo Corresponderá Não corresponderá

x-amz-*

x-amz-test

x-amz-

x-amz

x-*-amz

x-test-amz

x--amz

* Todos os cabeçalhos, exceto Authorization. Authorization
Access-Control-Allow-Methods

Especifica os métodos HTTP que o CloudFront usa como valores para o cabeçalho Access-Control-Allow-Methods em respostas às solicitações de comprovação de CORS. Os valores válidos são GET, DELETE, HEAD, OPTIONS, PATCH, POST, PUT e ALL. ALL é um valor especial que inclui todos os métodos de HTTP listados.

Access-Control-Allow-Origin

Especifica os valores que o CloudFront pode usar no cabeçalho de resposta Access-Control-Allow-Origin. Os valores válidos para essa configuração incluem uma origem específica (como http://www.example.com) ou o caractere curinga (*), o que indica que todas as origens são permitidas.

Observações
  • O caractere curinga (*) é permitido como a parte mais à esquerda do subdomínio (*.example.org).

  • O caractere curinga (*) não é permitido nas seguintes posições:

    • Domínios de nível superior (example.*)

    • À direita dos subdomínios (test.*.example.org) ou dentro de qualquer subdomínio (*test.example.org)

    • Dentro dos termos (exa*mple.org)

Para ver exemplos de como usar o caractere curinga, consulte a tabela a seguir.

Exemplo Corresponderá Não corresponderá

http://*.example.org

http://www.example.org

http://test.example.org

http://test.example.org:123

https://test.example.org

https://test.example.org:123

*.example.org

test.example.org

test.test.example.org

.example.org

http://test.example.org

https://test.example.org

http://test.example.org:123

https://test.example.org:123

example.org

http://example.org

https://example.org

http://example.org

https://example.org

http://example.org:123

http://example.org:*

http://example.org:123

http://example.org

http://example.org:1*3

http://example.org:123

http://example.org:1893

http://example.org:13

*.example.org:1*

test.example.org:123

Access-Control-Expose-Headers

Especifica os nomes de cabeçalho que o CloudFront usa como valores para o cabeçalho Access-Control-Expose-Headers em respostas às solicitações de CORS. Os valores válidos para essa configuração incluem nomes de cabeçalho de HTTP ou o caractere curinga (*).

Access-Control-Max-Age

Um número de segundos, que o CloudFront usa como valor para o cabeçalho Access-Control-Max-Age em respostas às solicitações de comprovação de CORS.

Substituição de origem

Uma configuração booliana que determina como o CloudFront se comporta quando a resposta da origem contém um dos cabeçalhos de CORS que também está na política.

  • Quando definida como true e a resposta da origem contiver um cabeçalho de CORS que também esteja na política, o CloudFront adicionará o cabeçalho de CORS da política à resposta. Depois, o CloudFront envia essa resposta ao visualizador. O CloudFront ignora o cabeçalho que recebeu da origem.

  • Quando definido como false e a resposta de origem contém um cabeçalho de CORS (independentemente de esse cabeçalho estar na política), o CloudFront inclui na resposta o cabeçalho de CORS que recebeu da origem. O CloudFront não adicionará cabeçalhos de CORS da política à resposta que é enviada ao visualizador.

Cabeçalhos de segurança

Você pode usar as configurações de cabeçalhos de segurança para adicionar e configurar vários cabeçalhos de resposta de HTTP relacionados à segurança em uma política de cabeçalhos de resposta.

Essa lista descreve como você pode especificar as configurações e valores válidos em uma política de cabeçalhos de resposta. Para obter mais informações sobre cada um desses cabeçalhos e como eles são usados em respostas de HTTP do mundo real, consulte os links para o MDN Web Docs.

Content-Security-Policy

Especifica as diretivas de política de segurança de conteúdo que o CloudFront usa como valores para o cabeçalho de resposta Content-Security-Policy.

Para obter mais informações sobre esse cabeçalho e diretivas de políticas válidas, consulteContent-Security-Policy no MDN Web Docs.

nota

O valor do cabeçalho Content-Security-Policy é limitado a 1783 caracteres.

Política de referenciador

Especifica a diretiva de política do referenciador que o CloudFront usa como valor para o cabeçalho de resposta Referrer-Policy. Os valores válidos para essa configuração são no-referrer, no-referrer-when-downgrade, origin, origin-when-cross-origin, same-origin, strict-origin, strict-origin-when-cross-origin e unsafe-url.

Para obter mais informações sobre esse cabeçalho e essas diretivas, consulte Referrer-Policy no MDN Web Docs.

Strict-Transport-Security

Especifica as diretivas e as configurações que o CloudFront usa como valor para o cabeçalho de resposta Strict-Transport-Security. Para essa configuração, você especifica separadamente:

  • Um número de segundos, que o CloudFront usa como valor para a diretiva max-age desse cabeçalho

  • Uma configuração booliana (true ou false) para preload, que determina se o CloudFront inclui a diretiva preload no valor desse cabeçalho

  • Uma configuração booliana (true ou false) para includeSubDomains, que determina se o CloudFront inclui a diretiva includeSubDomains no valor desse cabeçalho

Para obter mais informações sobre esse cabeçalho e essas diretivas, consulte Strict-Transport-Security no MDN Web Docs.

X-Content-Type-Options

Essa é uma configuração booliana (true ou false) que determina se o CloudFront adiciona o cabeçalho X-Content-Type-Options às respostas. Quando essa configuração for true, o CloudFront adicionará o cabeçalho X-Content-Type-Options: nosniff às respostas. Caso contrário, o CloudFront não adicionará esse cabeçalho.

Para obter mais informações sobre esse cabeçalho, consulte X-Content-Type-Options no MDN Web Docs.

X-Frame-Options

Especifica a diretiva que o CloudFront usa como valor para o cabeçalho de resposta X-Frame-Options. Os valores válidos para essa configuração são DENY ou SAMEORIGIN.

Para obter mais informações sobre esse cabeçalho e essas diretivas, consulte X-Frame-Options no MDN Web Docs.

X-XSS-Protection

Especifica as diretivas e as configurações que o CloudFront usa como valor para o cabeçalho de resposta X-XSS-Protection. Para essa configuração, você especifica separadamente:

  • Uma configuração X-XSS-Protection de 0 (desabilita a filtragem de XSS) ou 1 (habilita a filtragem de XSS)

  • Uma configuração booliana (true ou false) para block, que determina se o CloudFront inclui a diretiva mode=block no valor desse cabeçalho

  • Um URI de relatório, que determina se o CloudFront deve incluir a diretiva report=reporting URI no valor desse cabeçalho

Você pode especificar true para block, ou pode especificar um URI de relatório, mas não pode especificar os dois juntos. Para obter mais informações sobre esse cabeçalho e essas diretivas, consulte X-XSS-Protection no MDN Web Docs.

Substituição de origem

Cada uma dessas configurações de cabeçalhos de segurança contém uma configuração booleana (true ou false) que determina como o CloudFront se comporta quando a resposta da origem contém esse cabeçalho.

Quando essa configuração for definida como true e a resposta da origem contiver o cabeçalho, o CloudFront adicionará o cabeçalho na política à resposta que envia ao visualizador. Ele ignora o cabeçalho que recebeu da origem.

Quando essa configuração for definida como false e a resposta da origem contiver o cabeçalho, o CloudFront incluirá o cabeçalho recebido da origem na resposta que envia ao visualizador.

Quando a resposta da origem não contiver o cabeçalho, o CloudFront adicionará o cabeçalho da política à resposta que envia ao visualizador. O CloudFront faz isso quando essa configuração está definida como true ou false.

Cabeçalhos personalizados

Você pode usar as configurações de cabeçalhos personalizados para adicionar e configurar cabeçalhos de HTTP personalizados em uma política de cabeçalhos de resposta. O CloudFront adiciona esses cabeçalhos a cada resposta que ele retorna aos espectadores. Para cada cabeçalho personalizado, você também especifica o valor do cabeçalho, embora a especificação de um valor seja opcional. Isso ocorre porque o CloudFront pode adicionar um cabeçalho de resposta sem valor.

Cada cabeçalho personalizado também tem sua própria configuração de substituição de origem:

  • Quando essa configuração for definida como true e a resposta da origem contiver o cabeçalho personalizado que está na política, o CloudFront adicionará o cabeçalho personalizado da política à resposta que envia ao visualizador. Ele ignora o cabeçalho que recebeu da origem.

  • Quando essa configuração for false e a resposta da origem contiver o cabeçalho personalizado que está na política, o CloudFront incluirá o cabeçalho personalizado recebido da origem na resposta que envia ao visualizador.

  • Quando a resposta da origem não contiver o cabeçalho personalizado que está na política, o CloudFront adicionará o cabeçalho personalizado na política à resposta que envia ao visualizador. O CloudFront faz isso quando essa configuração está definida como true ou false.

Remover cabeçalhos

Você pode especificar cabeçalhos que deseja que o CloudFront remova das respostas que recebe da origem para que os cabeçalhos não sejam incluídos nas respostas que o CloudFront envia aos visualizadores. O CloudFront remove os cabeçalhos de cada resposta que envia aos visualizadores, independentemente de os objetos serem fornecidos do cache do CloudFront ou da origem. Por exemplo, você pode remover cabeçalhos que não são úteis para navegadores, como X-Powered-By ou Vary, para que o CloudFront remova esses cabeçalhos das respostas que envia aos visualizadores.

Quando você especifica cabeçalhos a serem removidos usando uma política de cabeçalhos de resposta, primeiro o CloudFront remove os cabeçalhos, depois adiciona os cabeçalhos especificados em outras seções da política de cabeçalhos de resposta (cabeçalhos de CORS, cabeçalhos de segurança, cabeçalhos personalizados etc.). Se você especificar um cabeçalho para remover, mas também adicionar o mesmo cabeçalho em outra seção da política, o CloudFront incluirá o cabeçalho nas respostas que ele envia aos visualizadores.

nota

Você pode usar uma política de cabeçalhos de resposta para remover os cabeçalhos Server e Date que o CloudFront recebeu da origem, para que esses cabeçalhos (conforme recebidos da origem) não sejam incluídos nas respostas que o CloudFront envia aos visualizadores. No entanto, se você fizer isso, o CloudFront adicionará sua própria versão desses cabeçalhos às respostas enviadas aos visualizadores. Para o cabeçalho Server que o CloudFront adiciona, o valor é CloudFront.

Cabeçalhos que não podem ser removidos

Você não pode remover os cabeçalhos a seguir usando uma política de cabeçalhos de resposta. Se você especificar esses cabeçalhos na seção Remove headers (Remover cabeçalhos) de uma política de cabeçalhos de resposta (ResponseHeadersPolicyRemoveHeadersConfig na API), receberá um erro.

  • Connection

  • Content-Encoding

  • Content-Length

  • Expect

  • Host

  • Keep-Alive

  • Proxy-Authenticate

  • Proxy-Authorization

  • Proxy-Connection

  • Trailer

  • Transfer-Encoding

  • Upgrade

  • Via

  • Warning

  • X-Accel-Buffering

  • X-Accel-Charset

  • X-Accel-Limit-Rate

  • X-Accel-Redirect

  • X-Amz-Cf-.*

  • X-Amzn-Auth

  • X-Amzn-Cf-Billing

  • X-Amzn-Cf-Id

  • X-Amzn-Cf-Xff

  • X-Amzn-ErrorType

  • X-Amzn-Fle-Profile

  • X-Amzn-Header-Count

  • X-Amzn-Header-Order

  • X-Amzn-Lambda-Integration-Tag

  • X-Amzn-RequestId

  • X-Cache

  • X-Edge-.*

  • X-Forwarded-Proto

  • X-Real-Ip

Cabeçalho de temporização do servidor

Use a configuração de cabeçalho Server-Timing para habilitar o cabeçalho Server-Timing em respostas HTTP enviadas do CloudFront. Você pode usar esse cabeçalho para visualizar métricas que podem ajudar a obter insights sobre o comportamento e a performance do CloudFront e sua origem. Por exemplo, você pode ver qual camada de cache forneceu um acerto de cache. Ou, você poderá ver a latência do primeiro byte da origem se houver uma falha de cache. As métricas no cabeçalho Server-Timing podem ajudar a solucionar problemas ou testar a eficiência da configuração do CloudFront ou da origem.

Para obter mais informações sobre como usar o cabeçalho de Server-Timing com o CloudFront, consulte os tópicos a seguir.

Para habilitar o cabeçalho Server-Timing, crie (ou edite) uma política de cabeçalhos de resposta.

Taxa de amostragem e cabeçalho de solicitação Pragma

Ao habilitar o cabeçalho Server-Timing em uma política de cabeçalhos de resposta, você também especifica a taxa de amostragem. A taxa de amostragem é um número de 0 a 100 (incluído) que especifica a porcentagem de respostas às quais você deseja que o CloudFront adicione o cabeçalho Server-Timing. Quando você define a taxa de amostragem como 100, o CloudFront adiciona o cabeçalho Server-Timing às respostas HTTP de todas as solicitações que corresponderem ao comportamento de cache ao qual a política de cabeçalhos de resposta está anexada. Quando você o define como 50, o CloudFront adiciona o cabeçalho a 50% das respostas das solicitações que corresponderem ao comportamento do cache. Você pode definir a taxa de amostragem para qualquer número de 0 a 100 com até quatro casas decimais.

Quando a taxa de amostragem é definida como um número menor que 100, você não pode controlar a quais respostas o CloudFront adiciona o cabeçalho Server-Timing, apenas a porcentagem. No entanto, você pode adicionar o cabeçalho Pragma com um valor definido como server-timing em uma solicitação HTTP para receber o cabeçalho Server-Timing na resposta a essa solicitação. Isso funciona independentemente da taxa de amostragem definida. Mesmo quando a taxa de amostragem estiver definida como zero (0), o CloudFront adicionará o cabeçalho Server-Timing à resposta se a solicitação contiver o cabeçalho Pragma: server-timing.

Cabeçalho de Server-Timing da origem

Quando há uma falha no cache e o CloudFront encaminha a solicitação à origem, a origem pode incluir um cabeçalho de Server-Timing em sua resposta ao CloudFront. Nesse caso, o CloudFront adiciona suas métricas ao cabeçalho de Server-Timing que recebeu da origem. A resposta que o CloudFront envia ao visualizador contém um único cabeçalho de Server-Timing que inclui o valor que veio da origem e as métricas que o CloudFront adicionou. O valor do cabeçalho da origem pode estar no final ou entre dois conjuntos de métricas que o CloudFront adiciona ao cabeçalho.

Quando há uma ocorrência de cache, a resposta que o CloudFront envia ao visualizador contém um único cabeçalho de Server-Timing que inclui apenas as métricas do CloudFront no valor do cabeçalho (o valor da origem não está incluído).

Métricas de cabeçalho de temporização do servidor

Quando o CloudFront adiciona o cabeçalho Server-Timing a uma resposta HTTP, o valor do cabeçalho contém uma ou mais métricas que podem ajudar a obter insights sobre o comportamento e a performance do CloudFront. A lista a seguir contém todas as métricas e seus possíveis valores. Um cabeçalho Server-Timing contém apenas algumas dessas métricas, dependendo da natureza da solicitação e da resposta por meio do CloudFront.

Algumas dessas métricas estão incluídas no cabeçalho Server-Timing com apenas um nome (sem valor). Outras são um nome e um valor. Quando uma métrica tem um valor, o nome e valor são separados por um ponto e vírgula (;). Quando o cabeçalho contém mais de uma métrica, as métricas são separadas por uma vírgula (,).

cdn-cache-hit

O CloudFront forneceu uma resposta do cache sem fazer uma solicitação para a origem.

cdn-cache-refresh

O CloudFront forneceu uma resposta do cache depois de enviar uma solicitação para a origem a fim de verificar se o objeto armazenado em cache ainda é válido. Nesse caso, o CloudFront não recuperou o objeto completo da origem.

cdn-cache-miss

O CloudFront não forneceu a resposta do cache. Nesse caso, o CloudFront solicitou o objeto completo da origem antes de retornar a resposta.

cdn-pop

Contém um valor que descreve qual ponto de presença (POP) do CloudFront processou a solicitação.

cdn-rid

Contém um valor com o identificador exclusivo do CloudFront para a solicitação. Você pode usar esse identificador de solicitação (RID) ao solucionar problemas com Support.

cdn-hit-layer

Esta métrica está presente quando o CloudFront fornece uma resposta do cache sem fazer uma solicitação à origem. Ela contém um dos seguintes valores:

  • EDGE: o CloudFront forneceu a resposta em cache de um local do POP.

  • REC: o CloudFront forneceu a resposta em cache de um local do cache de borda regional (REC).

  • Origin Shield: o CloudFront forneceu a resposta em cache do REC que está agindo como o escudo de origem.

cdn-upstream-layer

Quando o CloudFront solicita o objeto completo da origem, essa métrica está presente e contém um dos seguintes valores:

  • EDGE: um local do POP enviou a solicitação diretamente para a origem.

  • REC: um local do REC enviou a solicitação diretamente à origem.

  • Origin Shield: o REC que está agindo como escudo de origemenviou a solicitação diretamente à origem.

cdn-upstream-dns

Contém um valor com o número de milissegundos que foram gastos recuperando o registro DNS para a origem. Um valor de zero (0) indica que o CloudFront usou um resultado de DNS em cache ou reutilizou uma conexão existente.

cdn-upstream-connect

Contém um valor com o número de milissegundos entre quando a solicitação DNS de origem foi concluída e uma conexão TCP (e TLS, se aplicável) com a origem foi concluída. Um valor de zero (0) indica que o CloudFront reutilizou uma conexão existente.

cdn-upstream-fbl

Contém um valor com o número de milissegundos entre quando a solicitação HTTP de origem foi concluída e quando o primeiro byte foi recebido na resposta da origem (latência do primeiro byte).

cdn-downstream-fbl

Contém um valor com o número de milissegundos entre quando o local da borda terminou de receber a solicitação e quando enviou o primeiro byte da resposta ao visualizador.

Exemplos de cabeçalho de temporização do servidor

Veja a seguir exemplos de um cabeçalho Server-Timing que um visualizador pode receber do CloudFront quando a configuração do cabeçalho Server-Timing está habilitada.

exemplo – cache miss

O exemplo a seguir mostra um cabeçalho Server-Timing que um visualizador pode receber quando o objeto solicitado não está no cache do CloudFront.

Server-Timing: cdn-upstream-layer;desc="EDGE",cdn-upstream-dns;dur=0,cdn-upstream-connect;dur=114,cdn-upstream-fbl;dur=177,cdn-cache-miss,cdn-pop;desc="PHX50-C2",cdn-rid;desc="yNPsyYn7skvTzwWkq3Wcc8Nj_foxUjQUe9H1ifslzWhb0w7aLbFvGg==",cdn-downstream-fbl;dur=436

Esse cabeçalho de Server-Timing indica o seguinte:

  • A solicitação de origem foi enviada de um local de ponto de presença (POP) do CloudFront (cdn-upstream-layer;desc="EDGE").

  • O CloudFront usou um resultado DNS armazenado em cache para a origem (cdn-upstream-dns;dur=0).

  • Foram necessários 114 milissegundos para o CloudFront concluir a conexão TCP (e TLS, se aplicável) com a origem (cdn-upstream-connect;dur=114).

  • Foram necessários 177 milissegundos para o CloudFront receber o primeiro byte da resposta da origem, após concluir a solicitação (cdn-upstream-fbl;dur=177).

  • O objeto solicitado não estava no cache do CloudFront (cdn-cache-miss).

  • A solicitação foi recebida no local da borda identificado pelo código PHX50-C2 (cdn-pop;desc="PHX50-C2").

  • O ID exclusivo do CloudFront para essa solicitação era yNPsyYn7skvTzwWkq3Wcc8Nj_foxUjQUe9H1ifslzWhb0w7aLbFvGg== (cdn-rid;desc="yNPsyYn7skvTzwWkq3Wcc8Nj_foxUjQUe9H1ifslzWhb0w7aLbFvGg==").

  • Foram necessários 436 milissegundos para o CloudFront enviar o primeiro byte da resposta ao visualizador, depois de receber a solicitação do visualizador (cdn-downstream-fbl;dur=436).

exemplo – cache hit

O exemplo a seguir mostra um cabeçalho Server-Timing que um visualizador pode receber quando o objeto solicitado está no cache do CloudFront.

Server-Timing: cdn-cache-hit,cdn-pop;desc="SEA19-C1",cdn-rid;desc="nQBz4aJU2kP9iC3KHEq7vFxfMozu-VYBwGzkW9diOpeVc7xsrLKj-g==",cdn-hit-layer;desc="REC",cdn-downstream-fbl;dur=137

Esse cabeçalho de Server-Timing indica o seguinte:

  • O objeto solicitado estava no cache (cdn-cache-hit).

  • A solicitação foi recebida no local da borda identificado pelo código SEA19-C1 (cdn-pop;desc="SEA19-C1").

  • O ID exclusivo do CloudFront para essa solicitação era nQBz4aJU2kP9iC3KHEq7vFxfMozu-VYBwGzkW9diOpeVc7xsrLKj-g== (cdn-rid;desc="nQBz4aJU2kP9iC3KHEq7vFxfMozu-VYBwGzkW9diOpeVc7xsrLKj-g==").

  • O objeto solicitado foi armazenado em cache em um local de cache de borda regional (REC) (cdn-hit-layer;desc="REC").

  • Foram necessários 137 milissegundos para CloudFront enviar o primeiro byte da resposta ao visualizador, depois de receber a solicitação do visualizador (cdn-downstream-fbl;dur=137).