it-swarm.com.de

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

Meine Website ist 100% https. Ich habe Links zu anderen http-Domains. Der Referrer-Header wird beim Verknüpfen einer https-Seite mit einer http-Seite nicht gesetzt. Von http://en.wikipedia.org/wiki/HTTP_referrer

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

Ich würde es vorziehen, wenn andere Domains den Referrer sehen , damit 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 Verbindung von einer https-Seite zu einer http-Weiterleitungsseite in meiner eigenen Domain hergestellt wird. Es gibt also keinen Verweis auf die Umleitung.

11
nutcracker

Ich konnte einen Link von einer HTTPS-Seite zu einer HTTP-Seite in einer anderen Domain einrichten und die URL der ersten Seite mithilfe der folgenden Technik als Verweis weitergeben.

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 bewirkt, dass die Umleitung von der HTTP-Version der Origin-Seite stammt:

  1. Auf HTTPS-Ursprungsseite verknüpfen Verknüpft mit der aktuellen 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 von example1.com die Standardanforderung, wenn der Abfrageparameter 'goto' vorhanden ist. Es dann:

    • Speichert den 'goto'-Parameter in einem' goto'-Cookie.
    • Entfernt den Parameter und den Wert 'goto' aus der URL der aktuellen Anforderung
    • 302 leitet zu dieser neuen bereinigten URL auf die HTTP-Version der Origin-Domain weiter, d. H. http://example1.com/Origin.html
  3. Der Server überprüft jede Anfrage nach einem 'goto'-Cookie und löscht, falls vorhanden, das Cookie und rendert dann eine sehr einfache Umleitungsseite. Diese Seite enthält [2]:

    • Ein Javascript-Skript window.location.replace (), das zur URL goto cookie 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 ein gewisser Schutz vor bösen Jungs in Betracht gezogen werden, die den Parameter goto query verwenden, um UAs bei Phishing-Angriffen umzuleiten.

[2] Nicht alle Browser senden den Referrer, wenn sie über ein JS-Redirect- oder Meta-Refresh-Tag umleiten. In meinen Tests übergibt 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 in der Benutzeroberfläche Cookies deaktiviert sind, wird dies nur wieder zur Ursprungsseite weitergeleitet.

HTTP-Verbindungen nur für Umleitungen zulassen

Auf meinem Server gibt es 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 ich HTTP-Verbindungen unter bestimmten Bedingungen zulassen. Dafür gibt es viele Möglichkeiten. 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 disable_ssl-Cookie wird in Schritt 2 festgelegt und dann in Schritt 3 gelöscht.

5
nutcracker

Wie erwähnt ist diese Antwort es gibt eine neue Methode, um dies zu tun: Referrer Policy/Meta Tag.

Siehe spec und Beispiel in diesem Fragebogen .

9
Abbafei

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

<meta name="Referrer" content="Origin">
8

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.

SOURCE

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 Abhilfe wäre, ein internes Umleitungsskript zu verwenden, das auf dem HTTPS, das Sie zu HTTP umleiten, keine Verknüpfung zum Besucher herstellt und dann umleitet.

Zum Beispiel:

<a href="http://www.yours.com/out.php?www.other.com">www.outboundsite.com</a>, aber dies würde den ursprünglichen Verweis nicht verwenden.

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

6
Simon Hayter

gemäß HTTP 1.1-Protokoll http://www.w3.org/Protocols/rfc2616/rfc2616-sec15.html#sec15.1.

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

2
tony

Sieht so aus, als wäre das, was Sie wollen, nicht möglich. Wenn die Zielwebsite Google Analytics verwendet (oder ein kompatibles Programm, von dem ich glaube, dass Piwik eine ähnliche Syntax verwendet und andere Statistikpakete dies ignorieren könnten), 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 ihrem GA mit den Details angezeigt. Stellen Sie sicher, dass Sie Werte auswählen, die wahrscheinlich niemand anderes verwenden wird, damit Sie sie nicht in Konflikte zwingen oder Ihren Datenverkehr hinter anderen verstecken

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

Update - Re: Etikette

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

Die Etikette liegt immer im Auge des Betrachters. Ohne dies, denke ich, würde es in GA zumindest wahrscheinlich als direkt erscheinen, oder vielleicht (kein Satz), was ihre Zahlen verzerren würde, damit es so aussieht, als ob ihre Marke größer wäre 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 sehen, als würden sie sich wahrscheinlich nicht beschweren, wenn Sie ihnen kaum Datenverkehr senden. Wenn Sie ihnen viel senden, werden sie sich wahrscheinlich nicht beschweren! Wenn dies der Fall ist, können Sie normalerweise jemanden finden, dem Sie freien Datenverkehr gewähren 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
0
CodeMonkey