2013-03-14 23 views
5

Recentemente abbiamo spostato le nostre risorse su un CDN Cloudfront. Abbiamo notato che le superfici erano rotte su Firefox. Dopo alcuni minuti di ricerche, era una storia di CORS. Abbiamo permesso il campo Cloudfront.Heroku + CDN Cloudfront + Font - Bug di Firefox

application_controller:

after_filter :set_access_control_headers 

def set_access_control_headers 
    headers['Access-Control-Allow-Origin'] = CDN_CLOUDFRONT 
end 

production.rb:

CDN_CLOUDFRONT = "http://xxx.cloudfront.net" 

Questo ha funzionato molto bene fino a ieri. Dopo diverse ricerche e riflessioni, non ho trovato una soluzione.

Qualche idea?

+0

Hai controllato la risposta a questa domanda dal suono simile? http://stackoverflow.com/questions/12229844/amazon-s3-cors-cross-origin-resource-sharing-and-firefox-cross-domain-font-loa – friism

+0

La domanda suona uguale ma il provider CDN è diverso - > risposta diversa. – ferrix

risposta

7

Non ho lavorato con una configurazione Heroku, ma per quanto ne so (e come illustrato a developer.mozilla.org), l'intestazione Access-Control-Allow-Origin dovrebbe riflettere il valore del dominio, che consuma beni statici dalla CDN.

Es .: Per un sito web ospitato presso http://mydomain.net e le attività che consumano da http://wefe342r34r23.cloudfront.net

headers['Access-Control-Allow-Origin'] = 'http://mydomain.net'

permetterà mydomain.net per accedere asset tramite http://wefe342r34r23.cloudfront.net. In altre parole, la sostituzione di CDN_CLOUDFRONT con il nome di dominio del tuo sito web dovrebbe risolvere il problema.

Spero che questo aiuti.

P.S .: Non sono sicuro di come la tua configurazione ha funzionato fino a ieri. :)

P.P.S: Aggiunta alternative Domain Names (CNAME) al vostro CDN vi aiuterà in uno scenario in cui si desidera eliminare rapidamente una distribuzione esistente esposto sopra http://xxx.cloudfront.net e iniziare a utilizzare una nuova distribuzione di http://yyy.cloudfront.net. Non è necessario modificare nulla nella base di codice dell'applicazione se si utilizza un Nome dominio alternativo come http://cdn.mydomain.net in questo caso.

+0

Grazie rhetonik – hypee

+0

@hypee: Nessun problema. :) – rhetonik

+0

Questa intestazione dovrebbe essere impostata sulle risorse delle risorse giusto? O su query html? Sto lottando con questo ([e non sono l'unico] (http://stackoverflow.com/questions/20585703/cloudfront-firefox-cors-issues)) quindi se si dettaglio un po 'di più, sarebbe molto apprezzato! –

0

Questa è una copia di ciò che ho postato in un'altra pagina di Stack Exchange relativa allo stesso argomento, e la lascio nel caso in cui qualcun altro abbia gli stessi problemi ma non ha trovato la risposta giusta.

Ho avuto lo stesso problema con un'app Rails 3 su Heroku; Font: le icone impressionanti non venivano mostrate perché gestivo le mie risorse tramite Sumo CDN.

Ci sono diverse risposte correlate a questa, una delle quali consiste nel mettere un after_filter nel tuo application_controller per impostare il valore dell'intestazione (da freemanoid), ma questo non ha funzionato per me, e ho dovuto usare il middleware personalizzato suggerito da Peter Marklund.

Entrambe le soluzioni sono pubblicati qui sotto le rotaie 3.1 versioni: How to set access-control-allow-origin in webrick under rails?

0

soluzione che ho usato - Carica i font separatamente S3 e impostare la configurazione CORS sul secchio. Hardcode il carattere collega i caratteri S3. Tutte le risorse (diverse dai caratteri) arriveranno dal cloudfront: i tuoi font arriveranno da S3. È brutto, ma funziona ....

+0

Questo non funzionerà a meno che non si configuri correttamente Cloudfront per inoltrare le intestazioni Cors. –

Problemi correlati