Unsichere Elemente nicht per HTTPS
Wir wollten die Dachzeile unserer Homepage als HTML-Schnipsel bereitstellen. Allerdings wird sie auch von Seiten abgeholt, die primär per HTTPS bedient werden. Und da meckern moderne Browser (z. B. Chrome), sobald in der per HTTPS ausgelieferten Seite sogenannte „unsichere Elemente“, also per unverschlüsseltem HTTP übertragene Grafiken, enthalten sind. Daher haben wir im CSS für die beiden in der Dachzeile enthaltenen GIF-Grafiken die absoluten Pfade (nötig wegen Einbindung auch auf externen Servern) von HTTP auf HTTPS geändert. Als nun die Grafiken per HTTPS abgerufen wurden, zeigte sich in Chrome ein Bug mit HTTPS-Verbindungen: Ab einer bestimmten Anzahl Chrome-Connections bekam unser Web-Cluster Schluckauf. Gibt es noch einen anderen Weg, das Problem zu lösen?
- Wolfgang Schemmel
Wir wollten die Dachzeile unserer Homepage als HTML-Schnipsel bereitstellen. Allerdings wird sie auch von Seiten abgeholt, die primär per HTTPS bedient werden. Und da meckern moderne Browser (z. B. Chrome), sobald in der per HTTPS ausgelieferten Seite sogenannte „unsichere Elemente“, also per unverschlüsseltem HTTP übertragene Grafiken, enthalten sind. Daher haben wir im CSS für die beiden in der Dachzeile enthaltenen GIF-Grafiken die absoluten Pfade (nötig wegen Einbindung auch auf externen Servern) von HTTP auf HTTPS geändert. Als nun die Grafiken per HTTPS abgerufen wurden, zeigte sich in Chrome ein Bug mit HTTPS-Verbindungen: Ab einer bestimmten Anzahl Chrome-Connections bekam unser Web-Cluster Schluckauf. Gibt es noch einen anderen Weg, das Problem zu lösen?
Den entscheidenden Hinweis finden Sie in RFC 3986 Abschnitt 4.2 (siehe c’t-Link unten), hier werden „Relative References“ definiert. Das bedeutet, man kann das Schema HTTP oder HTTPS bei der Pfadangabe umgehen. Die URL beginnt dann einfach mit „//<domain>“. Die Entscheidung über HTTP oder HTTPS treffen die Browser anhand der umgebenden beziehungsweise einbindenden Ressource.
Wenn in Ihrem CSS bisher etwas stand wie
background:url("https://<domain>/icons/grafik.gif");
dann sollte es nun heiĂźen:
background:url(„//<domain>/icons/grafik.gif“);
Falls die Website per HTTPS aufgerufen wird, kommen auch die CSS-Dateien per HTTPS an und der Browser löst die mit „//“ beginnenden „Netzwerk-Pfad-Referenzen“ entsprechend zu HTTPS-URLs auf. Dieses Feature beherrschen alle modernen Browser.