При выполнении перенаправления 301, кто такой агент пользователя? - PullRequest
0 голосов
/ 30 января 2019

php.net указывает, что

'HTTP_REFERER' Адрес страницы (если есть), которая направила пользовательский агент на текущую страницу. Это устанавливается пользовательским агентом. Не все пользовательские агенты будут устанавливать это, а некоторые предоставляют возможность изменять HTTP_REFERER как функцию.Короче говоря, этому нельзя доверять.

У меня вопрос , если перенаправление происходит на уровне сервера, кто считается агентом UserAgent?и как мне убедиться, что информация о реферере отправляется с 301?

ex. У меня есть страница mywebsite1.com/page, которую я 301 перенаправляю на mywebsite2.com/page сейчас, когда она поступаетНа мою страницу mywebsite2.com/page я не вижу информации о реферере, и мне интересно, кто устанавливает эту информацию!

Ответы [ 3 ]

0 голосов
/ 30 января 2019

«Пользовательский агент» - это клиент, отправляющий HTTP-запросы на HTTP-сервер.В большинстве случаев пользовательским агентом является веб-браузер, но этот термин является более общим и включает такие вещи, как автоматизированные сценарии.

Главное недоразумение в вашем вопросе заключается в том, что перенаправление не "происходит на уровне сервера».Вот что происходит:

  1. Пользовательский агент отправляет HTTP-запрос на сервер для URL.
  2. Сервер отвечает HTTP-ответом, в строке «status» установлено значение«301» (или один из других «перенаправленных» статусов) и заголовок «Location», содержащий новый URL.
  3. Пользовательский агент , вероятно, отправляет второй запрос на сервер,для нового URL.
  4. Сервер получает второй запрос и не может узнать, был ли он связан с первым запросом .

Заголовок "referer" (опечатка)является историческим, и теперь официально «правильным») является лишь частью информации, отправляемой пользовательским агентом с каждым запросом .(Важно отметить, что, как и все в запросе, ему нельзя доверять для каких-либо целей безопасности, потому что кто-то может написать запрос с любым значением, которое он хочет.)

Раздел RFC в заголовке Referer не очень точно определяет его поведение, и я не могу найти там ссылки на то, как оно должно быть заполнено после ответа перенаправления.Таким образом, разные пользовательские агенты могут вести себя по-разному, и вам необходимо проверить их в разных браузерах.

0 голосов
/ 30 января 2019

Пользовательский агент - это любой объект, который отправляет HTTP-запросы, это может быть браузер, внутренняя библиотека, используемая серверным приложением, которое действует как клиент и выполняет запросы, прокси-сервер, пересылающий запросы на другой адрес или службы.

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

Если вы используете Guzzle для обработки перенаправлений, вам следуетпосмотрите Guzzle docs , чтобы автоматически добавить заголовок к запросам.Если Apache отвечает за обработку перенаправлений, вы должны вмешаться, чтобы установить заголовок в конфигурации веб-сервера, в этом SO ответе вы можете найти способ программно установить заголовки при перенаправлении.

0 голосов
/ 30 января 2019

Полагаться только на одного реферера вообще нельзя, так как браузеры могут не указывать это в зависимости от настроек конфиденциальности пользователя, установленных плагинов или даже настроек браузера.

Лучший способ обнаружить пользователей, пришедших с вашего перенаправленияпросто перенаправляет их на что-то вроде mywebsite2.com/page?redirected_from=mywebsite1, и найдите строку запроса на вашей странице, расположенную на mywebsite2.com.

Надеюсь, это имеет смысл.

...