Wie kann ich den Referrer-Header von meiner https-Domain an http-Domains übergeben?

11

Meine Website ist 100% https. Ich habe Links zu anderen http-Domains. Der Referrer-Header wird nicht festgelegt, wenn eine Verknüpfung von einer https-Seite zu einer http-Seite hergestellt wird. Von http://en.wikipedia.org/wiki/HTTP_referrer

Wenn auf eine Website über eine HTTP Secure (HTTPS) -Verbindung zugegriffen wird und ein Link auf eine andere Stelle als einen anderen sicheren Ort verweist, wird das Verweisfeld nicht gesendet.

Ich würde es vorziehen , dass andere Domänen können die Referrer sehen , so dass sie wissen , dass der Verkehr von meiner Domain kommt. Gibt es eine Möglichkeit, diesen Header zu erzwingen, oder gibt es eine andere Lösung?

Aktualisieren

Ich habe einige grundlegende Tests mit einer Umleitung durchgeführt:

http page  -- link to http  --> 301 redirect --> http page = referrer intact
https page -- link to https --> 301 redirect --> http page = referrer blank
https page -- link to http  --> 301 redirect --> http page = referrer blank
https page -- link to http  --> 302 redirect --> http page = referrer blank

Der Referrer geht verloren, wenn eine Verknüpfung von einer https-Seite zu einer http-Weiterleitungsseite in meiner eigenen Domain hergestellt wird. Es gibt also keinen Referrer für die Weiterleitung.

Nussknacker
quelle
Das Originsollte intakt sein, passt aber möglicherweise nicht zu Ihrem Anwendungsfall.
Pacerier

Antworten:

8

Ich hatte auch das gleiche Problem. Ich löse durch Hinzufügen eines Meta-Tags wie unten und es wird nur in Chrome und Safari funktionieren.

<meta name="Referrer" content="origin">
Mahendran Sakkarai
quelle
6

Leider können Sie auf HTTPS nicht auf Websites verweisen, die HTTP verwenden. Sie können jedoch HTTPS zu HTTPS oder HTTP zu HTTPS ausführen.

QUELLE

Clients DÜRFEN KEIN Referer-Header-Feld in eine (nicht sichere) HTTP-Anforderung aufnehmen, wenn die verweisende Seite mit einem sicheren Protokoll übertragen wurde.

Eine Problemumgehung besteht darin, ein internes Umleitungsskript zu verwenden, das nicht auf den Besucher des HTTPS verweist, den Sie zu HTTP umleiten, und dann umleitet.

Beispielsweise:

<a href="http://www.yours.com/out.php?www.other.com">www.outboundsite.com</a> Dies würde jedoch nicht den ursprünglichen Referrer verwenden.

Eine andere Möglichkeit ist die Verwendung von Trackbacks anstelle von Referrern. Soweit ich weiß, funktioniert dies in HTTPS.

Simon Hayter
quelle
Meine Tests haben ergeben, dass die Verwendung einer Umleitung nicht funktioniert (siehe Update).
Nussknacker
Verwenden Sie Trackbacks oder verlieren Sie das HTTPS;)
Simon Hayter
1
@bybe, Diese Antwort muss bearbeitet werden. Siehe serverfault.com/a/520603/87017 und webmasters.stackexchange.com/a/71331/7654
Pacerier
4

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:

  1. 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

  2. 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
  3. 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.

Nussknacker
quelle
Ok .... aber das passiert nicht genau den "Referrer Header ".
Pacerier
0

Sieht so aus, als wäre das, was Sie wollen, nicht möglich, also eine mögliche Problemumgehung. Wenn die Zielwebsite Google Analytics verwendet (oder ein kompatibles Programm, von dem ich glaube, dass Piwik eine ähnliche Syntax verwendet und andere Statistikpakete dumm wären, dies zu ignorieren), können Sie die Tracking-Parameter senden, z. B. in Ihrem Link zu example.com

http://www.example.com/?utm_campaign=spring&utm_medium=referral&utm_source=exampleblog

Dies wird in der GA mit den Details angezeigt. Stellen Sie sicher, dass Sie Werte auswählen, die wahrscheinlich von niemand anderem verwendet werden, damit Sie sie nicht in Konflikte zwingen oder Ihren Datenverkehr hinter anderen Personen verbergen

Google erstellt hier einen praktischen URL-Builder: http://support.google.com/analytics/answer/1033867?hl=de

Update - bezüglich: Etikette

Ohne mehr über die Art des Verkehrs zu wissen, kann ich nur allgemein / persönlich sprechen ...

Etikette wird immer im Auge des Betrachters sein. Ohne dies würde es zumindest in GA wahrscheinlich als direkt erscheinen, oder vielleicht (kein Satz), was ihre Zahlen verzerren würde, damit es so aussieht, als wäre ihre Marke größer als sie ist. Persönlich würde ich eine sorgfältig ausgewählte Kampagne bevorzugen, damit ich weiß, woher der Verkehr kommt.

Sie könnten es auch so betrachten, als würden sie sich wahrscheinlich nicht beschweren, wenn Sie ihnen kaum Verkehr schicken, wenn Sie ihnen viel schicken, werden sie sich wahrscheinlich nicht beschweren! Wenn dies der Fall ist, können Sie normalerweise jemanden finden, dem Sie freien Verkehr geben können!

und wenn Sie sehr spezifisch sind, sollte es keine Probleme verursachen; Kampagne als Name Ihrer Website und Quelle als Abschnitt Ihrer Website vielleicht?

http://www.example.com/?utm_campaign=mygreatsite.com&utm_medium=referral&utm_source=specialoffers
CodeMonkey
quelle
Gute Idee! Ich hatte über diese Problemumgehung nachgedacht, mich aber gefragt, ob es einige "Regeln" gab, um dies von meinem Ende an umzusetzen. Normalerweise werden diese Abfrageparameter von der Website eines Drittanbieters hinzugefügt, damit sie ihre Kampagnen usw. verfolgen können. Würde dieser Ansatz in irgendeiner Weise als schlechte Praxis angesehen?
Nussknacker