Estou recebendo o seguinte erro em alguns navegadores Chrome, mas não em todos. Não tenho certeza de qual é o problema neste momento.
A fonte da origem ' https://ABCDEFG.cloudfront.net ' foi impedida de carregar pela política de Compartilhamento de Recursos de Origem Cruzada: Nenhum cabeçalho 'Acesso-Controle-Permitir-Origem' está presente no recurso solicitado. Portanto, a origem ' https://sub.domain.com ' não é permitida.
Eu tenho a seguinte configuração do CORS no S3
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedHeader>*</AllowedHeader>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
O pedido
Remote Address:1.2.3.4:443
Request URL:https://abcdefg.cloudfront.net/folder/path/icons-f10eba064933db447695cf85b06f7df3.woff
Request Method:GET
Status Code:200 OK
Request Headers
Accept:*/*
Accept-Encoding:gzip,deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Host:abcdefg.cloudfront.net
Origin:https://sub.domain.com
Pragma:no-cache
Referer:https://abcdefg.cloudfront.net/folder/path/icons-e283e9c896b17f5fb5717f7c9f6b05eb.css
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36
Todas as outras solicitações do Cloudfront / S3 funcionam corretamente, incluindo arquivos JS.
amazon-web-services
amazon-s3
cors
amazon-cloudfront
Dallas Clark
fonte
fonte
Respostas:
Adicione esta regra ao seu .htaccess
ainda melhor, como sugerido por @david thomas, você pode usar um valor de domínio específico, por exemplo
fonte
Header set Access-Control-Allow-Origin "*"
? GraçasAccess-Control-Allow-Origin "*"
é potencialmente inseguro, pois abre o domínio para o acesso javascript de qualquer domínio. Você deve usar um valor de domínio específico, por exemplo,Access-Control-Allow-Origin "http://example1.com"
consulte também stackoverflow.com/a/10636765/583715 para obter uma boa explicação.O Chrome desde ~ setembro / outubro de 2014 sujeita as fontes às mesmas verificações CORS que o Firefox fez em https://code.google.com/p/chromium/issues/detail?id=286681 . Há uma discussão sobre isso em https://groups.google.com/a/chromium.org/forum/?fromgroups=#!topic/blink-dev/TT9D5-Zfnzw
Dado que, para as fontes, o navegador pode fazer uma verificação prévia , sua política do S3 também precisa do cabeçalho de solicitação de cors . Você pode verificar sua página, digamos, Safari (que atualmente não faz verificação de fontes no CORS) e Firefox (o que faz) para verificar novamente este é o problema descrito.
Consulte Resposta de estouro de pilha no Amazon S3 CORS (compartilhamento de recursos de origem cruzada) e carregamento de fonte entre domínios do Firefox para obter detalhes do Amazon S3 CORS.
Nota: em geral, como isso se aplicava apenas ao Firefox, pode ajudar a procurar o Firefox em vez do Chrome.
fonte
Consegui resolver o problema simplesmente adicionando
<AllowedMethod>HEAD</AllowedMethod>
à política CORS do S3 Bucket.Exemplo:
fonte
<AllowedMethod>HEAD</AllowedMethod>
minha política de CORS no balde e ainda não está funcionando.Nginx:
AWS S3:
http://schock.net/articles/2013/07/03/hosting-web-fonts-on-a-cdn-youre-going-to-need-some-cors/
fonte
Em 26 de junho de 2014, a AWS lançou o comportamento adequado de Vary: Origin no CloudFront. Agora, você apenas
Defina uma configuração do CORS para seu bucket S3:
No CloudFront -> Distribuição -> Comportamentos para essa origem, use a opção Encaminhar cabeçalhos: lista de permissões e coloque na lista branca o cabeçalho 'Origem'.
Aguarde ~ 20 minutos enquanto o CloudFront propaga a nova regra
Agora sua distribuição do CloudFront deve armazenar em cache respostas diferentes (com cabeçalhos CORS adequados) para cabeçalhos de origem do cliente diferentes.
fonte
A única coisa que funcionou para mim (provavelmente porque eu tinha inconsistências com o uso de www.):
Cole isso no seu arquivo .htaccess:
http://ce3wiki.theturninggate.net/doku.php?id=cross-domain_issues_broken_web_fonts
fonte
Eu tive o mesmo problema e esse link forneceu a solução para mim:
http://www.holovaty.com/writing/cors-ie-cloudfront/
A versão curta é:
Nota: Isso já foi feito na pergunta original
Nota: o código fornecido não é muito seguro, mais informações na página vinculada.
Sua distribuição na nuvem será atualizada, o que leva cerca de 10 minutos. Depois disso, tudo deve ficar bem, você pode verificar verificando se as mensagens de erro relacionadas ao CORS desapareceram do navegador.
fonte
Para aqueles que usam produtos Microsoft com um arquivo web.config:
Mesclar isso com o seu web.config.
Se você não tem permissão para editar o web.config, adicione esta linha ao seu código do servidor.
fonte
Há uma boa redação aqui .
Configurar isso no nginx / apache é um erro.
Se você estiver usando uma empresa de hospedagem, não poderá configurar a borda.
Se você estiver usando o Docker, o aplicativo deverá ser independente.
Observe que alguns exemplos usam,
connectHandlers
mas isso apenas define cabeçalhos no documento. O usorawConnectHandlers
se aplica a todos os ativos atendidos (fontes / css / etc).Este seria um bom momento para analisar a política do navegador, como enquadramento etc.
fonte
Basta adicionar o uso de origem no seu se você usar o node.js. como servidor ...
fonte
A solução de trabalho para o heroku está aqui http://kennethjiang.blogspot.com/2014/07/set-up-cors-in-cloudfront-for-custom.html (aspas a seguir):
Abaixo está exatamente o que você pode fazer se estiver executando o aplicativo Rails no Heroku e usando o Cloudfront como sua CDN. Foi testado no Ruby 2.1 + Rails 4, pilha Heroku Cedar.
Adicionar cabeçalhos HTTP CORS (Access-Control- *) aos recursos de fonte
font_assets
ao Gemfile.bundle install
config.font_assets.origin = '*'
aconfig/application.rb
. Se você deseja um controle mais granular, pode adicionar diferentes valores de origem a diferentes ambientes, por exemplo,config/config/environments/production.rb
curl -I http://localhost:3000/assets/your-custom-font.ttf
Configurar o Cloudfront para encaminhar cabeçalhos HTTP do CORS
No Cloudfront, selecione sua distribuição, na guia "comportamento", selecione e edite a entrada que controla a entrega das fontes (para o aplicativo Rails mais simples, você tem apenas uma entrada aqui). Altere os cabeçalhos avançados de "Nenhum" para "Lista de permissões". E adicione os seguintes cabeçalhos à lista de permissões:
Salve e pronto!
Advertência: Descobri que, às vezes, o Firefox não atualiza as fontes, mesmo que o erro do CORS acabe. Nesse caso, continue atualizando a página algumas vezes para convencer o Firefox de que você está realmente determinado.
fonte