获取请求发送者的 URL

Posted

技术标签:

【中文标题】获取请求发送者的 URL【英文标题】:get URL of request sender 【发布时间】:2011-11-08 09:08:56 【问题描述】:

我的应用程序被部署为 javascript 工作在某个页面上,而 web 应用程序在其他地方的 tomcat 上运行。

我现在尝试做的是找到一种方法来确定请求是从给定的网页发送的还是从其他地方发送的(例如,从本地主机 - 在这种情况下我不能信任发送的数据)。

当我尝试在我的 servlet 中执行此操作时 - 在 doPost() 中 - 我得到了那个 servlet,作为请求发件人 url = @987654321@ 的结果是:

    String domain = new URL(request.getRequestURL().toString()).toString(); 
    System.out.println("url = " + domain);

我需要做什么才能获取我的脚本向我发送数据的页面的 URL?

【问题讨论】:

【参考方案1】:

此信息可在HTTP referer header 中找到(是的,有拼写错误):

String referrer = request.getHeader("referer");
// ...

请注意,这是完全由客户端控制的 - 就像 HTTP 请求中的其他所有内容一样。客户端能够更改/欺骗它。您肯定不应该将其用于敏感的业务操作。将其用于统计数据或非正式横幅,例如 “嘿,欢迎来自 Google 的访问者!您的搜索关键字在此处突出显示:” 或类似。

如果我没记错的话,我认为您正在尝试重塑 Google Analytics。您可能会发现这也很有用:what's the proper way to write a js that will be included in other websites?

【讨论】:

在我的例子中这个字符串是空的。 (我在打开我的主题之前已经对其进行了测试,因为它是 SO 解决方案之一。)是因为它在本地测试它(我正在处理实际页面的保存副本)吗?这有什么问题吗?还是我的脚本需要以某种方式填充该标头属性? 那么你的JS发出的请求根本没有包含在请求头中。这完全取决于您发送请求的方式以及使用的客户端。最可靠的是将它作为参数传递。另请参阅链接。 所以如果我没听错的话,任何人都可以通过编辑 JS 来替换它? 是的。正如我所说,HTTP 请求 100% 由客户端控制。永远不要相信用户输入:) 那么还有其他方法吗?

以上是关于获取请求发送者的 URL的主要内容,如果未能解决你的问题,请参考以下文章

在Vue页面加载时动态发送请求获取微博授权url

使用 Axios 的 HTTP 获取请求在 URL 的开头使用本地主机 IP 发送

发送请求获取响应内容

发送post请求,回调时通过url传参

在 kotlin (Android ) 中发送获取请求

python parallel发送1000+ url请求并获取内容信息