O CloudFront tenta proteger o servidor de origem contra solicitações desnecessárias de objetos indisponíveis, armazenando em cache respostas a erros por 5 minutos, por padrão .
Parecia aparente pela pergunta que a explicação mais provável seria que o objeto estava sendo requisitado (por qualquer motivo) antes que ele realmente existisse, e a resposta de erro estava sendo armazenada em cache por alguns minutos, levando ao que parecia ser um "atraso" na disponibilidade do objeto. Mas o CloudFront não tem atrasos de propagação, porque o CloudFront é um cache pull-through - não há nada para propagar.
Seu teste curl
parece ser bem-sucedido, mas não prova nada, aparentemente porque (entre outras razões possíveis) você não incluiu um Origin:
no seu pedido curl
. Isso torna a solicitação curl
semanticamente diferente daquela enviada pelo navegador.
Ao avaliar se um objeto está disponível para ser servido no cache, o CloudFront não considera apenas o caminho. A maioria dos cabeçalhos que são encaminhados para o servidor de origem também são comparados e, se os cabeçalhos a serem encaminhados com essa solicitação não corresponderem aos cabeçalhos enviados com uma solicitação anterior com uma resposta armazenada em cache disponível, a resposta armazenada em cache não será usada e uma solicitação será enviada para a origem. Sua resposta será armazenada em cache junto com os cabeçalhos enviados.
Então, as duas solicitações a seguir:
GET /object HTTP/1.1
Host: www.example.com
e
GET /object HTTP/1.1
Host: www.example.com
Origin: http://www.example.com
... são (supondo que o Origin:
header está sendo encaminhado para o servidor de origem, como seria necessário para o CORS) tratado como duas solicitações diferentes, essencialmente não relacionadas, por necessidade - o CloudFront não sabe se o servidor de origem pode modificar suas respostas com base nos cabeçalhos de solicitação enviados. As respostas a essas duas solicitações seriam armazenadas em cache separadamente, e cada uma delas só seria atendida em resposta a solicitações de correspondência futuras.
Se a distribuição estiver configurada para encaminhar cookies ou cadeias de consulta, elas também serão armazenadas junto com a resposta em cache, que será atendida somente em resposta a solicitações que correspondam exatamente à solicitação original que gerou a resposta armazenada em cache - com base em todos os parâmetros encaminhados. (É por isso que o encaminhamento desnecessário de informações que o servidor de origem não precisa afetará a sua taxa de cache.)
Definindo o erro de cache com o TTL mínimo da distribuição para erros 404 até 0 resolve esse problema, impedindo o armazenamento em cache das respostas 404.