Ich konnte einen Link von einer HTTPS-Seite zu einer HTTP-Seite in einer anderen Domain einrichten und trotzdem die URL der ersten Seite als Referrer mit der folgenden Technik übergeben.
Definitionen
Ursprungsseite : HTTPS-Seite, auf der sich der Link zur von HTTP gehosteten Zielseite befindet. In diesem Beispiel:https://example1.com/origin.html
Zielseite : HTTP-Seite, die Zugriff auf den Referrer der Ursprungsseite hat. In diesem Beispiel:http://example2.com/destination.html
Grundplan
Dies hat zur Folge, dass die Umleitung von der HTTP-Version der Ursprungsseite stammt:
Link auf HTTPS-Ursprungsseite verweist auf die aktuelle Seite, fügt jedoch einen Abfrageparameter für die Zielseite hinzu [1]. z.B:https://example1.com/origin.html?goto=http://example2.com/destination.html
Wenn auf den Link geklickt wird, unterbricht der Server unter example1.com die Standardanforderung, wenn der Abfrageparameter 'goto' vorhanden ist. Es dann:
- Speichert den Parameter 'goto' in einem 'goto'-Cookie.
- Entfernt den Parameter und den Wert 'goto' aus der URL der aktuellen Anforderung
- 302 leitet auf diese neue bereinigte URL in der HTTP-Version der Ursprungsdomäne um, d. H.
http://example1.com/origin.html
Der Server überprüft bei jeder Anforderung ein "goto" -Cookie. Wenn vorhanden, wird das Cookie gelöscht und anschließend eine sehr einfache Weiterleitungsseite gerendert. Diese Seite enthält [2]:
- Ein Javascript-Skript window.location.replace (), das zur Goto-Cookie-URL umleitet.
- Ein Meta Refresh-Tag mit dem Wert der goto-Cookie-URL und einer Verzögerung von einigen Sekunden.
- Ein Link zur Goto-Cookie-URL.
Anmerkungen
[1] Diese grundlegende Lösung ist ein offener Redirector, und es sollte erwogen werden, sich vor bösen Jungs zu schützen, indem der Parameter goto query verwendet wird, um UAs bei Phishing-Angriffen umzuleiten.
[2] Nicht alle Browser senden den Referrer, wenn sie über eine JS-Umleitung oder ein Meta-Refresh-Tag umleiten. In meinem Test besteht IE8 und niedriger den Referrer nicht.
Ich bin nicht sicher, ob diese Technik es Suchmaschinen-Crawlern ermöglicht, den Links zu folgen. Dies ist für meine Anforderungen nicht wichtig.
Wenn auf dem UA Cookies deaktiviert sind, wird dies nur wieder zur Ursprungsseite umgeleitet.
Zulassen von HTTP-Verbindungen nur für Weiterleitungen
Auf meinem Server habe ich eine Apache-Regel zum Erzwingen von HTTPS unabhängig von der Anforderung:
<VirtualHost *:80>
ServerName example1.com
# if not on port 443 then 301 redirect to https while keeping any query string
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example1\.com$ [NC]
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [L,QSA,R=301]
Damit die oben beschriebene Umleitungstechnik funktioniert, muss HTTP-Verbindungen bedingt zugelassen werden. Es gibt viele Möglichkeiten, dies zu tun. Ich habe beschlossen, dass ein Cookie funktioniert.
<VirtualHost *:80>
ServerName example1.com
# if not on port 443 then 301 redirect to https while keeping any query string
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example1\.com$ [NC]
RewriteCond %{SERVER_PORT} !443
RewriteCond %{HTTP_COOKIE} !disable_ssl [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [L,QSA,R=301]
Das Cookie disable_ssl wird in Schritt 2 gesetzt und dann in Schritt 3 gelöscht.
Origin
sollte intakt sein, passt aber möglicherweise nicht zu Ihrem Anwendungsfall.