Habe "Geblockt laden von gemischten aktiven Inhalten" auf HTTP website
Problem
Ich entwickle eine website, serviert mit HTTP-Protokoll. In der Entwicklung, ich benutze Webpack mit der webpack-dev-server, der dazu dient die Seite lokal auf http://localhost:9090
.
War ich überrascht zu sehen, im Firefox-58-Konsole die folgenden gemischter Inhalt Fehlermeldung, laden Sie die schriftart-Datei. Es ist komisch für mich, denn die Seite wird serviert, mit HTTP, nicht HTTPS, und ich dachte, mixed content Fehler beschränkt sich nur auf HTTPS-Seiten.
`Blocked loading mixed active content “http://localhost:9090/b1aa06d82e70bbd5a14259a94c9bbb40.ttf”
Fand ich heraus, dass die Quelle des Fehlers ist YouTube video eingebettet in eine <iframe>
auf der Seite (<iframe src="https://www.youtube.com/embed/...>
). Sobald ich entfernen Sie die YouTube-einbetten, die Fehlermeldung verschwindet von der Konsole aus.
Verstehe ich nicht, dieses Verhalten, denn es ist nicht verschachtelt HTTPS-iframe, das macht diese Anfrage, aber die äußeren HTTP-Seite (top-level browsing context)!
Zusammenfassung
Der äußeren Seite (top-level browsing context) serviert mit HTTP. Nur der eingebetteten iframe-Zugriff mit HTTPS. Die HTTP-Anforderung für eine schriftart-Datei, die auf der äußeren Seite macht (nicht das eingebettete iframe) erzeugt gemischte Inhalte Fehler in Firefox 58 Konsole.
Code-Beispiele
Geben ein Beispiel erstellte ich 2 Stifte auf Plunker serviert, der über HTTP und Importe (die Plunker Website selbst, nicht mein code) WOFF-font-Font-Awesome-über-HTTP.
Beispiel Mit Fehler, die YouTube-iframe eingebettet, die über HTTPS, produziert den folgenden Fehler im Firefox-58-Konsole: Blocked loading mixed active content “http://plnkr.co/css/font/Font-Awesome-More.woff”
.
Beispiel Ohne Fehler, das ist der gleiche code nur mit den iframe entfernt, produziert keine Fehler.
Fragen
- Wie kann Sie eine gemischte Inhalte auf der Seite geladen, per HTTP-Protokoll? Ich dachte gemischte Inhalte können nur existieren Webseiten, die über HTTPS geladen. Bedeutet dass eine resource über HTTPS (wie es von YouTube einbetten) macht alle erforderlichen Inhalte über HTTP mixed content?
- Wie kann ich den Fehler beheben? Ich Plane nicht, zu dienen, die website über HTTPS und ich will, dass meine Schriftarten zu laden ordentlich auf die Produktion HTTP-server.
- Die
<iframe src="https://www.youtube.com/embed/...>
ist ein separates Dokument — HTTPS — und den mixed-content-Fehler ist vermutlich über das Dokument, richtig? - Nein, das wäre sinnvoll, aber die Fehler sind über die Anforderungen von meinem Haupt-HTML-Datei - font-Dateien, die angefordert von meinem "lokalen" stylesheets.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es, dass Firefox-caches Schriften und versucht, führen Sie eine Anforderung an den Cache-schriftart, die durch die Nutzung der URL der schriftart war ursprünglich ausgeliefert.
Das führt zu der mixed-content-Fehler.
Sah ich, dass problem mit font awesome Schriftarten, wenn ich entwickelte eine web-Anwendung auf dem server mit HTTPS, die ich entwickelt hatte, die auf einem lokalen server unter HTTP. Bei der Anforderung der remote-site, Firefox meldet:
Blocked loading mixed active content “http://localhost:8080/fontawesome-webfont.woff2”
Das hat mich beeindruckt, weil es keine Anforderung an localhost programmiert, dass die web-Anwendung.
In deinem Beispiel die schriftart geladen wird, indem
ist
url(../font/Font-Awesome-More.woff)
Einer der CSS oder Skripte geladen werden, die von der iframe muss dann versuchen, laden, dass die Schrift vielleicht wieder mit einem dynamisch konstruierten URL.
Ich weiß nicht, etwas über das Schrift-caching-Strategie, umgesetzt im Firefox - vielleicht erkennen Sie die schriftart, indem Sie seinen Namen - aber eine Lösung fand ich für meinem Fall ist, "Vergessen Sie Über Diese Seite" localhost " in der Geschichte von Firefox.
Eine Lösung für Ihren Fall sein könnte, zu wechseln HTTPS
https://
wie alle externen Verweise (einschließlich Schriftarten). Wenn ich öffnen Sie die Developer Tools Webconsole, sehe ich "gemischten Inhalt" - Fehler für die Schriftarten geladen, in eine völlig andere Registerkarte. Einmal schließe ich die Registerkarte und reload meiner eigenen Website, ist der Fehler Weg. Gehen Abbildung. Trotzdem, der Webconsole, hat alle details. Wenn der Fehler nicht sichtbar ist, überprüfen Sie die Filter in der web-Konsole (wenn man Glück hat, gibt es auch einen link zum löschen der Filter).Ich hatte das gleiche Problem. Ich gelöst, indem er eine relative Pfad anstelle einer absolute Weg.
Seit meiner Schriften sind aufgerufen, von diesem CSS "/styles/mein.css",
und meine Schriften waren, das in der "/fonts/Open_Sans..."
Vorher (mit FF-Fehler):
Nach (ohne FF-Fehler):
Da Sie Probleme bei Firefox ist Ende, Folgen Sie der jeweiligen Dokumentation,
Wie fix eine website mit blockiert gemischte Inhalte:
Ich auf dieses problem als Ergebnis meiner live-und staging-Server HTTPS, und meine lokalen/dev kopieren sein HTTP.
Ich löste es durch die Erzeugung mein CSS dynamisch, und die Verwendung von inline -
data:
Schriften in der CSS, anstatt die URL-Verweise. Diese entfernt alle URL-Informationen, die einer schriftart zugeordnet, und so werden mögliche cross-site-cache-Kontamination.In meinem Fall habe ich benutzt PHP, aber das könnte sich zu einem beliebigen server-side-Sprache.
Ich habe den 304-header-kick, wenn die Kopie bereits an den browser bereitgestellt wird letzten. Sie müssen nicht zu haben, aber es wird die Leistung verbessert, wenn Sie tun. Schrift-Definitionen, die nur selten ändern, so können Sie diese Verzögerung länger auf high-traffic-sites.