AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1073320
Accepted
UncleBob
UncleBob
Asked: 2021-08-03 07:34:25 +0800 CST2021-08-03 07:34:25 +0800 CST 2021-08-03 07:34:25 +0800 CST

Problema do AWS Cloudfront CORS com arquivos de fonte

  • 772

Eu tenho um aplicativo Javascript que é entregue ao navegador a partir de um endpoint do CloudFront. Todos os arquivos estáticos do aplicativo são hospedados em um bucket do S3. Isso envolve um monte de arquivos javascript e css, bem como alguns arquivos de fonte.

O html que carrega toda a aplicação é gerado e entregue por um servidor, vamos chamar esse servidor de "https://my.domain.com".

Como mencionado, este é apenas o arquivo html. Todo o conteúdo estático é então baixado do endpoint do cloudfront, que aponta para um bucket como sua origem. Vamos chamar esses xxxx.cloudfront.net e o bucket de my-bucket.

Pelo que entendi, praticamente qualquer solicitação desse html gerado para o endpoint do cloudfront é uma solicitação CORS, já que a origem do html é my.domain.com e todos os arquivos solicitados claramente não estão hospedados nesse domínio.

Então, naturalmente, fui configurar todas as coisas do CORS. Em primeiro lugar, o bucket é completamente público e possui a seguinte política CORS:

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "*",
        ],
        "ExposeHeaders": [],
        "MaxAgeSeconds": 3000
    }
]

E isso parece funcionar, para tudo... exceto os arquivos de fonte! Eu provavelmente deveria mencionar a estrutura de pastas do bucket. Possui três pastas, produção, desenvolvimento e comum. O conteúdo destes deve ser bastante auto-explicativo. Common contém as fontes, bem como algumas bibliotecas javascript de terceiros. A produção e o desenvolvimento contêm o js e o css para seus respectivos ambientes.

De qualquer forma, tudo carrega, exceto os arquivos de fonte, para os quais recebo o seguinte erro:

Access to font at 'https://xxxx.cloudfront.net/common/fonts/outline/budicon-classic.ttf?jdete2' from origin 'https://my.domain.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Pareceu-me extremamente estranho que apenas os arquivos de fonte tivessem esse problema. Outros arquivos na pasta comum parecem ser carregados muito bem, e se eu apenas colar https://xxxx.cloudfront.net/common/fonts/outline/budicon-classic.ttf?jdete2 no meu navegador, ele funciona .

A única diferença parece ser que esses arquivos não são carregados do html, mas do css via @font-face. Observando as solicitações geradas pelo navegador ao carregar o aplicativo, vejo claramente que, por exemplo, o cabeçalho de origem está definido, o que não era para solicitar arquivos js ou css. Set-Fetch-Mode está definido como "cors", enquanto para os outros arquivos foi definido como "no-cors".

De qualquer forma, tentei corrigir o problema no lado da nuvem. Primeiro, adicionei o cabeçalho "Access-Control-Allow-Origin: *" à configuração de origem. Então eu adicionei uma configuração de comportamento para a origem para permitir GET, HEAD, OPTIONS para o padrão de caminho *.

E agora... bem, agora eu ainda tenho o mesmo problema, e estou completamente sem ideias, embora me perguntando por que o pedido criado por @font-face é formado de forma tão diferente quando comparado aos pedidos de recursos javascript e css, mas acima de tudo, o que diabos posso fazer para carregar neles fontes sangrentas?

amazon-s3 amazon-cloudfront css cors
  • 1 1 respostas
  • 909 Views

1 respostas

  • Voted
  1. Best Answer
    UncleBob
    2021-08-04T01:05:16+08:002021-08-04T01:05:16+08:00

    Ok, isso foi chato, mas acho lógico.

    As correções que postei acima funcionam , mas as alterações de configuração não invalidam o cache do cloudfront. E como os erros de CORS são gerados pelo navegador , o cloudfront fez cache dessa resposta, cabeçalhos e tudo, já que não conseguiu ver nada de errado com ela.

    Para encurtar a história: cache de cloudfront invalidado após alterações de configuração, agora funciona. ARGH!

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve