进行301重定向时,谁是UserAgent?

时间:2019-01-30 12:47:42

标签: php laravel user-agent referrer

php.net specifies that

  

'HTTP_REFERER'引用了   用户代理到当前页面。 这是由用户代理设置的。   用户代理将对此进行设置,其中一些提供修改功能   HTTP_REFERER作为功能。简而言之,它不能真正被信任。

我的问题是,如果重定向发生在服务器级别,谁被视为UserAgent?以及如何确保推荐人信息与301一起发送?

例如。 我有页面mywebsite1.com/page,该页面我301重定向到mywebsite2.com/page 现在,当它转到我的mywebsite2.com/page时,我看不到任何引荐来源信息,我想知道是谁设置了该信息!

3 个答案:

答案 0 :(得分:3)

“用户代理”是将HTTP请求发送到HTTP服务器的客户端。在大多数情况下,用户代理是Web浏览器,但该术语更笼统,包括自动脚本之类的内容。

您的问题中的关键误解是重定向不会“发生在服务器级别”。这是怎么回事:

  1. 用户代理将HTTP请求发送到服务器以获取URL。
  2. 服务器以HTTP响应进行响应,“状态”行设置为“ 301”(或其他“重定向”状态之一),并带有包含新URL的“位置”标头。
  3. 用户代理可能向服务器发送第二个请求,请求新的URL。
  4. 服务器收到第二个请求,并且无法知道它是否与第一个请求连接

“引荐来源”标头(拼写错误是历史记录,现在正式为“正确”)只是用户代理随每个请求发送的信息的一部分。 (重要的是,就像请求中的所有内容一样,出于某种安全目的,它不能被信任,因为有人可以用他们想要的任何值编写请求。)

RFC section on the Referer header并没有非常详细地说明其行为,我在此找不到任何有关在重定向响应后应如何填充它的参考。因此,不同的用户代理的行为可能会有所不同,因此您需要在不同的浏览器中进行测试才能确定。

答案 1 :(得分:0)

仅依靠引荐来源网址是根本不可靠的,因为浏览器可以根据用户的隐私设置,已安装的插件甚至浏览器设置来忽略提供引用。

检测来自重定向的用户的最佳方法是将用户重定向到类似mywebsite2.com/page?redirected_from=mywebsite1的位置,然后在mywebsite2.com的页面上查找该查询字符串。

希望这很有道理。

答案 2 :(得分:0)

用户代理是发出HTTP请求的任何实体,它可以是浏览器,服务器应用程序使用的内部库(充当客户端并发出请求),代理服务器将请求转发到其他地址或服务。 / p>

不能保证引荐来源网址将转发到目标服务器。例如,在代理中,您必须指示它将引荐来源标头转发到目标服务器(通常在配置级别)。您应以类似的方式检查负责处理重定向的人员将引荐来源标头转发到以下请求(重定向的目的地)。

如果您正在使用Guzzle处理重定向,则应使用Guzzle docs自动将标头添加到请求中。 如果Apache负责处理重定向,则应进行干预以在Web服务器配置中设置标头,在此SO answer中,您可以找到一种在重定向时以编程方式设置标头的方法。