Как передать заголовок реферера из моего домена https в домены http?

12

Мой сайт на 100% https. У меня есть ссылки на другие http-домены. Заголовок реферера не устанавливается при связывании со страницы https на страницу http. От http://en.wikipedia.org/wiki/HTTP_referrer

Если доступ к веб-сайту осуществляется через соединение HTTP Secure (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должен быть неповрежденным, но может не подходить к вашему варианту использования.
Пейсер

Ответы:

8

У меня тоже была такая же проблема. Я решаю, добавив метатег, как показано ниже, и он будет работать только в Chrome и Safari.

<meta name="Referrer" content="origin">
Махендран Саккарай
источник
6

К сожалению, вы не можете ссылаться на HTTPS на сайты, использующие HTTP. Однако вы можете использовать HTTPS для HTTPS или HTTP для HTTPS.

ИСТОЧНИК

Клиенты НЕ ДОЛЖНЫ включать поле заголовка Referer в (незащищенный) HTTP-запрос, если ссылающаяся страница была передана по безопасному протоколу.

Обходным путем будет использование внутреннего скрипта перенаправления, который вместо прямой ссылки на посетителя по HTTPS перенаправляет на HTTP, а затем перенаправляет.

Например:

<a href="http://www.yours.com/out.php?www.other.com">www.outboundsite.com</a> но это не будет использовать оригинальный реферер.

Другая возможность - использовать трекбеки, а не рефереры, и, насколько я знаю, это работает в HTTPS.

Саймон Хейтер
источник
Мое тестирование показало, что использование перенаправления не работает (см. Обновление).
Щелкунчик
Используйте трекбеки или потеряйте HTTPS;)
Саймон Хейтер
1
@bybe, этот ответ нуждается в редактировании. См. Serverfault.com/a/520603/87017 и webmasters.stackexchange.com/a/71331/7654
Pacerier
4

Я смог установить ссылку со страницы HTTPS на страницу HTTP в другом домене и по-прежнему передавать URL первой страницы в качестве источника перехода, используя следующую технику.

Определения

Исходная страница : страница HTTPS, на которой находится ссылка на целевую страницу, размещенную на HTTP. В этом примере: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. При нажатии на ссылку сервер на example1.com прерывает стандартный запрос, когда присутствует параметр запроса 'goto'. Это тогда:

    • Сохраняет параметр goto в файле cookie goto.
    • Удаляет параметр и значение goto из URL текущего запроса.
    • 302 перенаправляет на этот новый очищенный URL-адрес в HTTP-версии исходного домена, т.е. http://example1.com/origin.html
  3. Сервер проверяет каждый запрос на cookie «goto» и, если он присутствует, удаляет cookie, а затем отображает очень простую страницу перенаправления. Эта страница содержит [2]:

    • Скрипт Javascript window.location.replace (), который перенаправляет на URL-адрес файла cookie goto.
    • Тег Meta Refresh со значением URL-адреса файла cookie goto и задержкой в ​​несколько секунд.
    • Ссылка на URL-адрес файла cookie goto.

Заметки

[1] Это базовое решение является открытым перенаправителем, и следует уделить некоторое внимание защите от злоумышленников с помощью параметра запроса goto для перенаправления UA при фишинг-атаках.

[2] Не все браузеры отправляют реферер при перенаправлении через JS redirect или meta meta tag. В моем тестировании IE8 и ниже не проходит реферер.

Я не уверен, позволит ли этот метод сканерам поисковых систем переходить по ссылкам. Это не важно для моих требований.

Если в UA отключены файлы cookie, он снова будет перенаправлен на исходную страницу.

Разрешение HTTP-соединений только для перенаправлений

На моем сервере у меня есть правило Apache для принудительного применения HTTPS независимо от запроса:

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

Файл cookie disable_ssl будет установлен на шаге 2, а затем удален на шаге 3.

щелкунчик
источник
Хорошо .... но это не совсем передает " заголовок реферера ".
Пейсер
2

в соответствии с протоколом HTTP 1.1 http://www.w3.org/Protocols/rfc2616/rfc2616-sec15.html#sec15.1.3

Клиенты НЕ ДОЛЖНЫ включать поле заголовка Referer в (незащищенный) HTTP-запрос, если ссылающаяся страница была передана с защищенным

Тони
источник
1
Почему я не должен?
Мартейн
0

Похоже, то, что вы хотите, не возможно, поэтому возможный обходной путь; если целевой сайт использует Google Analytics (или, как я полагаю, совместимая программа, 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=ru.

Обновление - ре: этикет

Не зная больше о характере трафика, я могу говорить только в общем / лично ...

этикет всегда будет в глазах смотрящего. Без этого я думаю, что в GA, по крайней мере, это будет выглядеть как прямое или, может быть (не определено), что исказит их цифры, чтобы создать впечатление, что их бренд был больше, чем он есть. Лично я предпочел бы тщательно выбранную кампанию, чтобы я знал, откуда идет трафик.

Вы также можете посмотреть на это так: если вы вряд ли отправите им какой-либо трафик, они, вероятно, не заметят, если вы отправите им много, они, вероятно, не будут жаловаться! Если они это сделают, то вы обычно можете найти кого-то еще, чтобы дать бесплатный трафик!

и если вы очень конкретны, это не должно вызывать проблем; кампания в качестве названия вашего сайта и источника в качестве раздела вашего сайта может быть?

http://www.example.com/?utm_campaign=mygreatsite.com&utm_medium=referral&utm_source=specialoffers
CodeMonkey
источник
Отличная идея! Я думал об этом обходном пути, но задавался вопросом, были ли у них какие-то «правила» в реализации этого с моей стороны. Обычно эти параметры запроса добавляются сторонним веб-сайтом, чтобы они могли отслеживать свои кампании и т. Д. Будет ли такой подход считаться плохой практикой в ​​любом случае?
Щелкунчик