【问题标题】:HttpWebRequest referer header lost following redirectHttpWebRequest 引用标头在重定向后丢失
【发布时间】:2015-04-02 23:54:57
【问题描述】:

在 HttpWebRequest 上设置引用标头时,我看到了两种不同的行为。在某些站点上,每次重定向后,referer 标头将保留,而在其他站点上,referer 标头在第一次请求后被丢弃。什么会导致这种行为,有没有办法控制它?

示例(这似乎是 HTTPS 特定的,但不确定原因)

在此请求中,标头将被丢弃在重定向中。

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://mail.google.com/mail/");
        request.Referer = "http://www.google.com";
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

在此请求中,标头保留在随后的每个重定向上。第二个请求的区别是http vs https。

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://mail.google.com/mail/");
        request.Referer = "http://www.google.com";
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

【问题讨论】:

  • 你能澄清一下“referer header is dropped”的说法吗? (最好有代码示例)...
  • 使用上面的代码发出请求。当我从站点一请求返回 302 响应的页面时,遵循重定向时的后续请求仍然设置了引用标头。当我使用相同的代码从站点 2 请求返回 302 响应的页面时,遵循重定向时的后续请求不再包含引用标头。引用标头仅用于原始请求,但在跟随重定向时被丢弃。这就是我在 Fiddler 中看到的。
  • 我添加了一个例子来澄清。
  • 浏览器在 http/https 转换时放弃了引用,因此 .Net 做同样的事情似乎是合理的......不确定 .Net 行为是否记录在某处。如果您必须保留它 - 通过禁用请求的“跟随重定向”手动执行 302。
  • 您可以查看sources 实际发生的情况,但如果您需要非常特殊的行为,我会坚持使用手动重定向。

标签: c# httpwebrequest system.net


【解决方案1】:

当来自任何 HTTPS 站点时,无论其去往何处,都将剥离引荐来源标头:

http://referencesource.microsoft.com/#System/net/System/Net/HttpWebRequest.cs,5782

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 2021-02-14
    • 1970-01-01
    相关资源
    最近更新 更多