Recibo el siguiente error en un par de navegadores Chrome, pero no en todos. No estoy completamente seguro de cuál es el problema en este momento.
La fuente de origen ' https://ABCDEFG.cloudfront.net ' ha sido bloqueada por la política de intercambio de recursos de origen cruzado: No hay encabezado 'Access-Control-Allow-Origin' presente en el recurso solicitado. Por lo tanto, el origen ' https://sub.domain.com ' no tiene acceso permitido.
Tengo la siguiente configuración de CORS en S3
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedHeader>*</AllowedHeader>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
La solicitud
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 las demás solicitudes de Cloudfront / S3 funcionan correctamente, incluidos los archivos JS.
amazon-web-services
amazon-s3
cors
amazon-cloudfront
Dallas Clark
fuente
fuente
Respuestas:
Agregue esta regla a su .htaccess
aún mejor, como lo sugiere @david thomas, puede usar un valor de dominio específico, por ejemplo
fuente
Header set Access-Control-Allow-Origin "*"
? GraciasAccess-Control-Allow-Origin "*"
es potencialmente inseguro ya que abre el dominio al acceso a JavaScript desde cualquier dominio. En su lugar, debe usar un valor de dominio específico, por ejemplo,Access-Control-Allow-Origin "http://example1.com"
consulte también stackoverflow.com/a/10636765/583715 para obtener una buena explicación.Chrome desde ~ septiembre / octubre de 2014 hace que las fuentes estén sujetas a las mismas comprobaciones de CORS que Firefox ha realizado https://code.google.com/p/chromium/issues/detail?id=286681 . Hay una discusión sobre esto en https://groups.google.com/a/chromium.org/forum/?fromgroups=#!topic/blink-dev/TT9D5-Zfnzw
Dado que para las fuentes, el navegador puede hacer una verificación previa , entonces su política S3 también necesita el encabezado de solicitud cors . Puede verificar su página en, por ejemplo, Safari (que en la actualidad no hace que CORS verifique las fuentes) y Firefox (que sí) para verificar que este sea el problema descrito.
Consulte la respuesta de desbordamiento de pila en Amazon S3 CORS (Cross-Origin Resource Sharing) y la carga de fuentes entre dominios de Firefox para los detalles de Amazon S3 CORS.
Nota: en general, porque esto solía aplicarse solo a Firefox, por lo que puede ser útil buscar Firefox en lugar de Chrome.
fuente
Pude resolver el problema simplemente agregando
<AllowedMethod>HEAD</AllowedMethod>
a la política CORS del S3 Bucket.Ejemplo:
fuente
<AllowedMethod>HEAD</AllowedMethod>
a mi política CORS en el cubo y todavía no funciona.Nginx:
AWS S3:
http://schock.net/articles/2013/07/03/hosting-web-fonts-on-a-cdn-youre-going-to-need-some-cors/
fuente
El 26 de junio de 2014, AWS lanzó el comportamiento Vary: Origin adecuado en CloudFront, así que ahora solo
Establezca una configuración CORS para su depósito S3:
En CloudFront -> Distribución -> Comportamientos para este origen, use la opción Encabezados hacia adelante: Lista blanca y la lista blanca en el encabezado 'Origen'.
Espere ~ 20 minutos mientras CloudFront propaga la nueva regla
Ahora su distribución de CloudFront debe almacenar en caché diferentes respuestas (con encabezados CORS adecuados) para diferentes encabezados de origen del cliente.
fuente
Lo único que me ha funcionado (probablemente porque tuve inconsistencias con el uso de www.):
Pegue esto en su archivo .htaccess:
http://ce3wiki.theturninggate.net/doku.php?id=cross-domain_issues_broken_web_fonts
fuente
Tuve el mismo problema y este enlace me proporcionó la solución:
http://www.holovaty.com/writing/cors-ie-cloudfront/
La versión corta es:
Nota: Esto ya se hizo en la pregunta original
Nota: el código proporcionado no es muy seguro, hay más información en la página vinculada.
Su distribución en la nube se actualizará, lo que demora aproximadamente 10 minutos. Después de eso, todo debería estar bien, puede verificarlo verificando que los mensajes de error relacionados con CORS hayan desaparecido del navegador.
fuente
Para aquellos que usan productos de Microsoft con un archivo web.config:
Combine esto con su web.config.
Si no tiene permiso para editar web.config, agregue esta línea en su código del lado del servidor.
fuente
Hay una buena reseña aquí .
Configurar esto en nginx / apache es un error.
Si está utilizando una empresa de alojamiento, no puede configurar el borde.
Si está utilizando Docker, la aplicación debe ser autónoma.
Tenga en cuenta que algunos ejemplos usan
connectHandlers
pero esto solo establece encabezados en el documento. El uso serawConnectHandlers
aplica a todos los activos servidos (fuentes / css / etc.).Este sería un buen momento para mirar la política del navegador como el encuadre, etc.
fuente
Simplemente agregue el uso de origen en su si usa node.js como servidor ...
fuente
La solución de trabajo para heroku está aquí http://kennethjiang.blogspot.com/2014/07/set-up-cors-in-cloudfront-for-custom.html (siguen las citas):
A continuación se muestra exactamente lo que puede hacer si está ejecutando su aplicación Rails en Heroku y está usando Cloudfront como su CDN. Fue probado en Ruby 2.1 + Rails 4, pila Heroku Cedar.
Agregue encabezados HTTP CORS (Access-Control- *) a los recursos de fuente
font_assets
a Gemfile.bundle install
config.font_assets.origin = '*'
aconfig/application.rb
. Si desea un control más granular, puede agregar diferentes valores de origen a diferentes entornos, por ejemplo,config/config/environments/production.rb
curl -I http://localhost:3000/assets/your-custom-font.ttf
Configure Cloudfront para reenviar encabezados HTTP CORS
En Cloudfront, seleccione su distribución, en la pestaña "comportamiento", seleccione y edite la entrada que controla la entrega de sus fuentes (para la aplicación Rails más simple, solo tiene 1 entrada aquí). Cambie Encabezados hacia adelante de "Ninguno" a "Lista de tiempo". Y agregue los siguientes encabezados a la lista blanca:
¡Guárdalo y listo!
Advertencia: descubrí que a veces Firefox no actualizaba las fuentes incluso si el error CORS desaparecía. En este caso, actualice la página varias veces para convencer a Firefox de que está realmente decidido.
fuente