【问题标题】:Request.Headers["Referer"] does not existRequest.Headers["Referer"] 不存在
【发布时间】:2017-12-06 01:40:08
【问题描述】:

我有一个包含两个 ASP.NET Core MVC 项目的解决方案。一个项目 (Client) 正在使用 HttpClient 向另一个 (Server) 发出请求。当Server 中的操作收到请求时,我想获取发送它的东西的 URL。我读过的每一篇文章都声称Request.Headers["Referer"] 是解决方案,但在我的情况下Headers 不包含“referer”键(或“referrer”)。

Server收到请求时,如何找到发送它的Client的URL?

【问题讨论】:

    标签: c# asp.net-core-mvc asp.net-core-webapi


    【解决方案1】:

    这就是您获取请求的引荐网址的方式。但是引用者不是发送请求的对象。当一个人点击一个网站的链接转到另一个网站时,浏览器会在标题中设置引用者。当浏览器向新网站发出该请求时,该请求通常具有包含先前网站 url 的 Referer 标头。

    接收服务器无法获取发出请求的“客户端”的 url,记住典型的 Web 浏览器客户端没有任何 url。接收服务器通常只能获取客户端的 IP 地址。

    由于您可以控制客户端软件,如果您愿意,可以让客户端在将请求发送到服务器之前将您想要的任何信息放在请求的标头中,然后服务器可以从标头中获取该信息。

    【讨论】:

      【解决方案2】:

      如果您使用的是HttpClient,则由站点发出请求来添加该标头。在这种情况下,它不会自动添加。所以:更改代码 - 或请求更改代码 - 以添加您期望的标题和值。如果您通过请求进行代理,您可能会从 当前请求的 Referer 标头中获取值,然后添加它。


      即使在浏览器将请求作为正常页面周期的一部分进行的一般情况下,您也不能依赖它:Referer 标头通常是故意不发送的;取决于浏览器版本、配置、您是否要在不同域之间切换、是否是 HTTPS,以及 <a href=... 上的 rel 标记,例如“noreferrer”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-01
        • 2014-09-28
        • 2016-05-20
        • 2022-12-22
        • 1970-01-01
        • 2017-01-14
        • 2018-03-16
        相关资源
        最近更新 更多