Otrzymuję następujący błąd w kilku przeglądarkach Chrome, ale nie we wszystkich. Nie jestem do końca pewien, na czym polega problem w tym momencie.
Czcionka z pochodzenia „ https://ABCDEFG.cloudfront.net ” została zablokowana przed ładowaniem przez zasady współdzielenia zasobów między źródłami: Żądany zasób nie zawiera nagłówka „Access-Control-Allow-Origin”. Dlatego Origin „ https://sub.domain.com ” nie ma dostępu.
Mam następującą konfigurację CORS na S3
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedHeader>*</AllowedHeader>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
Prośba
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
Wszystkie inne żądania z Cloudfront / S3 działają poprawnie, w tym pliki JS.
amazon-web-services
amazon-s3
cors
amazon-cloudfront
Dallas Clark
źródło
źródło
Odpowiedzi:
Dodaj tę regułę do swojego .htaccess
jeszcze lepiej, jak sugeruje @david thomas, możesz użyć określonej wartości domeny, np
źródło
Header set Access-Control-Allow-Origin "*"
? DziękiAccess-Control-Allow-Origin "*"
jest potencjalnie niebezpieczne, ponieważ otwiera domenę na dostęp javascript z dowolnej domeny. Zamiast tego powinieneś użyć określonej wartości domeny, np.Access-Control-Allow-Origin "http://example1.com"
Zobacz także stackoverflow.com/a/10636765/583715, aby uzyskać dobre wyjaśnienie.Chrome od ~ września / października 2014 r. Poddaje czcionki tym samym kontrolom CORS, co Firefox https://code.google.com/p/chromium/issues/detail?id=286681 . Jest dyskusja na ten temat na https://groups.google.com/a/chromium.org/forum/?fromgroups=#!topic/blink-dev/TT9D5-Zfnzw
Biorąc pod uwagę, że w przypadku czcionek przeglądarka może przeprowadzić kontrolę wstępną , Twoja zasada S3 również wymaga nagłówka żądania cors . Możesz sprawdzić swoją stronę w, powiedzmy, Safari (która obecnie nie sprawdza czcionek za pomocą CORS) i Firefoksie (to robi), aby dokładnie sprawdzić, czy jest to opisany problem.
Zobacz odpowiedź na temat przepełnienia stosu na Amazon S3 CORS (Cross-Origin Resource Sharing) i ładowanie czcionek międzydomenowych przeglądarki Firefox, aby uzyskać szczegółowe informacje na temat Amazon S3 CORS.
Uwaga: ogólnie rzecz biorąc, ponieważ dotyczyło to tylko przeglądarki Firefox, więc może pomóc wyszukiwanie przeglądarki Firefox, a nie Chrome.
źródło
Udało mi się rozwiązać problem, po prostu dodając
<AllowedMethod>HEAD</AllowedMethod>
do polityki CORS łyżki S3.Przykład:
źródło
<AllowedMethod>HEAD</AllowedMethod>
do moich zasad CORS w zasobniku i nadal nie działa.Nginx:
AWS S3:
http://schock.net/articles/2013/07/03/hosting-web-fonts-on-a-cdn-youre-going-to-need-some-cors/
źródło
26 czerwca 2014 AWS wydało poprawne zachowanie Vary: Origin na CloudFront, więc teraz po prostu
Ustaw konfigurację CORS dla swojego zasobnika S3:
W CloudFront -> Distribution -> Behaviors dla tego źródła, użyj opcji Forward Headers: Whitelist i dodaj do białej listy nagłówek „Origin”.
Poczekaj około 20 minut, aż CloudFront propaguje nową regułę
Teraz Twoja dystrybucja CloudFront powinna buforować różne odpowiedzi (z odpowiednimi nagłówkami CORS) dla różnych nagłówków Origin klienta.
źródło
Jedyne, co mi się sprawdziło (prawdopodobnie dlatego, że miałem niespójności z użyciem www.):
Wklej to do swojego pliku .htaccess:
http://ce3wiki.theturninggate.net/doku.php?id=cross-domain_issues_broken_web_fonts
źródło
Miałem ten sam problem i ten link zapewnił mi rozwiązanie:
http://www.holovaty.com/writing/cors-ie-cloudfront/
Krótka wersja to:
Uwaga: zostało to już zrobione w pierwotnym pytaniu
Uwaga: podany kod nie jest zbyt bezpieczny, więcej informacji na podlinkowanej stronie.
Twoja dystrybucja w chmurze zostanie zaktualizowana, co zajmie około 10 minut. Potem wszystko powinno być dobrze, możesz zweryfikować, sprawdzając, czy komunikaty o błędach związane z CORS zniknęły z przeglądarki.
źródło
Dla osób używających produktów firmy Microsoft z plikiem web.config:
Połącz to z plikiem web.config.
Jeśli nie masz uprawnień do edycji pliku web.config, dodaj tę linię w kodzie po stronie serwera.
źródło
Jest miły writeup tutaj .
Konfiguracja tego w nginx / apache jest błędem.
Jeśli korzystasz z firmy hostingowej, nie możesz skonfigurować krawędzi.
Jeśli używasz platformy Docker, aplikacja powinna być samodzielna.
Zauważ, że niektóre przykłady używają,
connectHandlers
ale to ustawia tylko nagłówki w dokumencie. UżycierawConnectHandlers
dotyczy wszystkich obsługiwanych zasobów (czcionki / css / itp.).To byłby dobry moment, aby przyjrzeć się zasadom przeglądarki, takim jak kadrowanie itp.
źródło
Po prostu dodaj użycie źródła w swoim, jeśli używasz node.js jako serwera ...
źródło
Rozwiązanie robocze dla Heroku jest tutaj http://kennethjiang.blogspot.com/2014/07/set-up-cors-in-cloudfront-for-custom.html (cytaty ):
Poniżej znajduje się dokładnie to, co możesz zrobić, jeśli używasz aplikacji Rails w Heroku i używasz Cloudfront jako CDN. Został przetestowany na Ruby 2.1 + Rails 4, Heroku Cedar.
Dodaj nagłówki HTTP CORS (Access-Control- *) do zasobów czcionek
font_assets
do Gemfile.bundle install
config.font_assets.origin = '*'
doconfig/application.rb
. Jeśli chcesz bardziej szczegółowej kontroli, możesz dodać różne wartości pochodzenia do różnych środowisk, np.config/config/environments/production.rb
curl -I http://localhost:3000/assets/your-custom-font.ttf
Skonfiguruj Cloudfront do przekazywania nagłówków HTTP CORS
W Cloudfront wybierz swoją dystrybucję, w zakładce "zachowanie" wybierz i edytuj wpis kontrolujący dostarczanie czcionek (dla większości prostych aplikacji Railsowych masz tylko 1 wpis). Zmień Forward Headers z „None” na „Whilelist”. I dodaj następujące nagłówki do białej listy:
Zapisz to i to wszystko!
Uwaga: odkryłem, że czasami Firefox nie odświeża czcionek, nawet jeśli zniknął błąd CORS. W takim przypadku odśwież stronę kilka razy, aby przekonać Firefoksa, że jesteś naprawdę zdeterminowany.
źródło