【问题标题】:How to know a URL comes from a browser's address bar or a ajax call?如何知道 URL 来自浏览器的地址栏或 ajax 调用?
【发布时间】:2020-11-03 08:21:18
【问题描述】:

我在下面有一个 URL 请求:

https://myapp.com/funnyproject/tools/getLayers.ashx?search=true

我可以通过直接在地址栏中输入它来调用它,也可以通过客户端的ajax请求来完成:

$.ajax({
    url: "tools/getLayers.ashx?search=true",
    headers: { "cache-control": "no-cache" },
    cache: false,
    success: function (data) {
        //do something
    }
});

所以这里的问题是我如何知道它来自哪里? 我尝试使用 HttpContext.Current.Request.UrlReferrer 属性,但这没有帮助。 请给点建议!

【问题讨论】:

  • 你想做什么?您可以检查 ajax 请求的请求标头 X-Requested-With 是否存在。但是如果用户决定,可以在发送请求之前删除该标头。如果您担心其他网站向您的网站发送请求,请查看CORS
  • 我试图拒绝从地址栏直接访问处理程序 (ashx)。我的网络应用程序只允许来自 Ajax 的调用。为此,我需要检测哪个来自地址栏,哪个来自 Ajax。
  • 这样的限制实际上是不可能的。但是你可以通过上面的标题检查让诚实的人保持诚实。
  • 你应该了解用户代理的概念。 Chrome 和此类浏览器是一类用户代理,有无头、命令行和许多其他类型的用户代理,它们可以与 http(s) 通信,它们可以发送与另一种用户代理发送的请求相同的请求,因为它们都谈论相同的协议,这对您的服务器来说很重要。不要在不切实际的限制上浪费时间。

标签: c# asp.net .net vb.net web


【解决方案1】:

没有办法阻止用户进行看起来像浏览器的 ajax 调用。但是对于默认呼叫,要识别来自的呼叫,您可以使用标头 User-agent。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent

在那里你不仅可以得到浏览器,还可以得到它的类型和版本,还有操作系统和其他一些信息。

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 2013-08-21
    • 1970-01-01
    • 2015-01-11
    • 2014-01-28
    • 2015-02-09
    • 2016-05-02
    • 2012-08-15
    相关资源
    最近更新 更多