httpsドメインからhttpドメインにリファラーヘッダーを渡すにはどうすればよいですか?


12

私のウェブサイトは100%httpsです。他のhttpドメインへのリンクがあります。httpsページからhttpページにリンクする場合、リファラーヘッダーは設定されません。http://en.wikipedia.org/wiki/HTTP_referrerから

WebサイトがHTTPセキュア(HTTPS)接続からアクセスされ、リンクが別のセキュアな場所以外の場所を指している場合、リファラーフィールドは送信されません。

他のドメインリファラー参照できるようにして、トラフィックが私のドメインからのものであることを彼らに知らせたいと思います。このヘッダーを強制する方法はありますか、それとも別の解決策がありますか?

更新

私はリダイレクトを使用していくつかの基本的なテストを行いました:

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

httpsページから自分のドメインのhttpリダイレクトページにリンクすると、リファラーが失われます。そのため、リダイレクトにリファラーはありません。


Originしかし、あなたのユースケースに適合しない場合があり、そのままでなければなりません。
ペーチェリエ2015

回答:



8

私も同じ問題を抱えていました。以下のようなメタタグを追加することで解決し、ChromeとSafariでのみ機能します。

<meta name="Referrer" content="origin">

6

残念ながら、HTTPSでHTTPを使用しているサイトを参照することはできません。ただし、HTTPSからHTTPSまたはHTTPからHTTPSを実行できます。

ソース

参照ページがセキュアなプロトコルで転送された場合、クライアントは(非セキュアな)HTTPリクエストにリファラーヘッダーフィールドを含めないでください。

回避策は、内部リダイレクトスクリプトを使用することです。リンク先をHTTPSでビジターにリダイレクトするのではなく、HTTPにリダイレクトしてからリダイレクトします。

例えば:

<a href="http://www.yours.com/out.php?www.other.com">www.outboundsite.com</a> しかし、これは元のリファラーを使用しません。

別の可能性は、リファラーではなくトラックバックを使用することであり、私の知る限り、これはHTTPSで機能します。


私のテストでは、リダイレクトの使用は機能しないことが示されています(更新を参照)。
くるみ割り人形2013

トラックバックを使用するか、HTTPSを失います;)
Simon Hayter

1
@bybe、この回答には編集が必要です。参照serverfault.com/a/520603/87017webmasters.stackexchange.com/a/71331/7654
Pacerier

4

HTTPSページから別のドメインのHTTPページへのリンクを設定し、次の手法を使用して、最初のページのURLを参照元として渡すことができました。

定義

元のページ:HTTPでホストされている宛先ページへのリンクが配置されているHTTPSページ。この例では:https://example1.com/origin.html

リンク先ページ:リンク元ページの参照元にアクセスできるHTTPページ。この例では:http://example2.com/destination.html

基本計画

これには、リダイレクトが元のページのHTTPバージョンから来るようにする効果があります。

  1. HTTPS発信元ページのリンクは現在のページにリンクしますが、宛先ページのクエリパラメータを追加します[1]。例えば:https://example1.com/origin.html?goto=http://example2.com/destination.html

  2. リンクをクリックすると、クエリパラメータ 'goto'が存在する場合、example1.comのサーバーが標準リクエストに割り込みます。それから:

    • 「goto」パラメーターを「goto」Cookieに保管します。
    • 現在のリクエストのURLから「goto」パラメータと値を削除します
    • 302は、元のドメインのHTTPバージョンのこのクリーンアップされた新しいURLにリダイレクトします。 http://example1.com/origin.html
  3. サーバーはすべてのリクエストで「goto」Cookieをチェックし、存在する場合はCookieをクリアして、非常に単純なリダイレクトページをレンダリングします。このページには[2]が含まれています:

    • goto cookie urlにリダイレクトするJavascript window.location.replace()スクリプト。
    • goto cookie urlの値と数秒の遅延を含むメタリフレッシュタグ。
    • goto cookieのURLへのリンク。

ノート

[1]この基本的な解決策はオープンリダイレクタであり、フィッシング攻撃でUAをリダイレクトするためにgotoクエリパラメータを使用して悪意のある人から保護するためにいくつかの考慮が必要です。

[2] JSリダイレクトまたはメタリフレッシュタグを介してリダイレクトするときに、すべてのブラウザがリファラーを送信するわけではありません。私のテストでは、IE8以下はリファラーを通過しません。

この手法で検索エンジンのクローラーがリンクをたどることができるかどうかはわかりません。これは私の要件にとって重要ではありません。

UAでCookieが無効になっている場合、これは単に元のページにリダイレクトされるだけです。

リダイレクトのためだけにHTTP接続を許可する

私のサーバーには、リクエストに関係なくHTTPSを適用するためのApacheルールがあります。

<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]

上記のリダイレクト手法が機能するためには、条件付きでHTTP接続を許可する方法が必要です。これを行うには多くの方法があります。私はクッキーがうまくいくと決めました。

<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]

disable_ssl Cookieはステップ2で設定され、ステップ3で削除されます。


OK ...しかし、これは「リファラーヘッダー」を正確に渡しません。
Pacerier、2015


0

あなたが望むものは不可能であるように見えるので、可能な回避策です。ターゲットサイトがGoogleアナリティクスを使用している場合(または互換性のあるプログラムでPiwikが同様の構文を使用していると思われ、他の統計パッケージがこれを無視するのが難しい場合)、たとえばexample.comへのリンクで追跡パラメータを送信できます。

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

これはGAに詳細とともに表示されます。他のユーザーが使用する可能性が低い値を選択するようにしてください。これにより、競合を強制したり、他の人の背後にトラフィックを隠したりしないでください。

Googleは便利なURLビルダーをここで実行しますhttp://support.google.com/analytics/answer/1033867?hl=ja

更新-re:エチケット

交通の性質についてもっと知らなければ、私は一般的に/個人的にしか話すことができません...

エチケットは常に見る人の目にあります。これがないと、少なくともGAでは、直接表示されるか、おそらく(何も設定されていない)数字が歪んで、ブランドが実際よりも大きいように見えると思います。個人的には、トラフィックがどこから来ているのかがわかるように、厳選されたキャンペーンを好みます。

また、トラフィックをほとんど送信しない場合は、おそらく気付かないでしょう。大量に送信する場合は、文句を言わないでしょう。もしそうなら、あなたは通常無料のトラフィックを与える誰かを見つけることができます!

あなたが非常に具体的であるならば、それは問題を引き起こすべきではありません。あなたのサイトの名前としてのキャンペーンとあなたのサイトのセクションとしてのソース?

http://www.example.com/?utm_campaign=mygreatsite.com&utm_medium=referral&utm_source=specialoffers

良いアイデア!私はこの回避策について考えていましたが、私の側からこれを実装することに関するいくつかの「ルール」であるかどうか疑問に思いました。通常、これらのクエリパラメータはサードパーティのWebサイトによって追加されるため、キャンペーンなどを追跡できます。このアプローチは、悪い方法と見なされますか?
くるみ割り人形2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.