2016-01-15 25 views
5

Benim CSS https://www.site1.com barındırılan (o kimliği doğrulanmış etki alanıdır) ve bunun da doğrulanır https://media.site1.com (üzerinde bulunan woff/ttf dosyaları kullanır - www'den daha aynıdır). Bu sitelere bağlanmak için, kimliği doğrulanmış bir proxy kullanmalıyım.Benim CSS can yük web yazı woff dosyaları bir diğer https üzerinde bulunan + yetkilendirme sunucusu (CORS ilgili)

Çapraz etki alanı yüklemesine izin vermek için CORS'yi etkinleştirmem gerekiyor, ancak bu etki alanı temel kimlik doğrulaması yapılmışsa başka bir etki alanından kaynak yükleyemiyorum VE kimliği doğrulanmış bir proxy kullanıyorum.

Ben Apache eklemiş aşağıdaki yönergeler:

SetEnvIf Origin "^http(s)?://(.*)$" origin_is=$0 
Header set Access-Control-Allow-Origin %{origin_is}e env=origin_is 
Header set Access-Control-Allow-Credentials "true" 
Header set Access-Control-Allow-Headers "*" 

Tüm Origin izin vermelidir, ancak CSS (GET isteği ile) woff dosyasını yüklediğinde, alıyorum:

Talebi (sadece ilginç başlıklar):

GET file.woff HTTP/1.1 
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0 
Host media.site1.com 
Origin https://www.site1.com 
Proxy-Authorization Basic XXX1234567 
Connection keep-alive 
Cache-Control max-age=0 

Tepki (a) Firebug veya HttpFox tarafından görülen s:

HTTP/1.0 401 Unauthorized 
WWW-Authenticate BASIC realm="Unspecified" 
Server BigIP 
Connection close 
Content-Length 0 

el www gitmeden önce media.site1.com kimlik doğrulaması, sonuç aynıdır. Tarayıcı "medya" sunucusuna temel kimlik doğrulama bilgilerini göndermiyor gibi görünüyor.

WOFF dosyalarının farklı bir konumdan, temel kimlik doğrulaması ve sonunda bir kuruluş kimliği doğrulanmış proxy'si ile yüklendiğinden emin olmak için ayarlamam gereken başka başlıklar var mı?

cevap

3

Sadece aynı durumla karşılaştık.

W3C spesifikasyonlarına göre, CSS dosyalarından bağlanan fontlar "anonim" modda yüklenmelidir: https://www.w3.org/TR/2013/CR-css-fonts-3-20131003/#font-fetching-requirements Temel olarak tarayıcı normalde asla kimlik doğrulama çerezlerini göndermeyecektir. https://media.site1.com

  • yazı tipi dosyaları için

    1. devre dışı bırak kimlik Bu kesmek ve ben işe yarayacak tamamen emin değilim:

      Anladığım kadarıyla

      , 2 seçeneğiniz var. Burada açıklandığı gibi, CSS dosyasından önce yazı tipini yüklemek için bir AJAX isteği yayımlamayı deneyebilirsiniz: https://css-tricks.com/preventing-the-performance-hit-from-custom-fonts/ Tabii ki, bu makalede performans nedenleriyle yapıyorlar, ancak yine de, yazı tipi dosyasını ayrı ayrı yüklemek, yani CSS dosyası yüklendiğinde, tarayıcı önbelleğinden alır. Burada açıklandığı gibi, withCredentials başlığını AJAX çağrınıza eklemeniz gerekebilir: https://stackoverflow.com/a/7190487 Ayrıca, CSS dosyasının önce yüklenmesini önlemek için CSS dosyalarını genellikle sayfanın üst kısmına ve JavaScript'in altına yüklediğiniz sürece başarısız istekleri, AJAX çağrısının başarı geri bildirimi üzerine dinamik olarak yüklemeniz gerekecek.

    İkinci çözümün çok fazla sorun gibi göründüğünü biliyorum, ama daha iyi biriyle gelemedim.

  • +0

    Bu sınır neden yalnızca web yazı tipleriyle tanıtıldı? Neden css, js vs .. ile değil? –

    +0

    @ elad.chen Sadece W3C speklerinin yazarlarının, diğer sunuculardan kolayca ve serbestçe yüklenebilecek fontları tasarladığını düşünüyorum. – AsGoodAsItGets