我需要在Java Servlet中记录链接到我的网站的URL。
它可以在HTTP referer
头中找到。你可以在servlet中按照以下方式获取它:
String referrer = request.getHeader("referer"); // Yes, with the legendary misspelling.
然而,您需要意识到这是客户端控制的值,因此可能会被欺骗成完全不同的值甚至被删除。因此,无论它返回什么值,您都不应将其用于后端的任何关键业务流程,而只能用于演示控制(例如隐藏/显示/更改某些纯布局部分)和/或统计数据。
对于有兴趣的人,可以在Wikipedia中找到有关拼写错误背景的信息。
实际上应该是:request.getHeader("Referer")
,或者更好的方法并且保证100%正确的是:request.getHeader(HttpHeaders.REFERER)
,其中HttpHeaders是com.google.common.net.HttpHeaders
getHeader(String name)
方法的描述(引用):“标头名称不区分大小写。”
- informatik01org.apache.http.HttpHeaders
。 - Barettorg.apache.http.HttpHeaders
没有ORIGIN头?而com.google.common.net.HttpHeaders
有。 - Loner在请求中传递了URL: request.getRequestURL()
.
如果你指的是链接到你的其他网站?你想要捕获HTTP Referrer,可以通过调用以下方法实现:
request.getHeader("referer");
request.getHeader("referer");
你可以参考这里的禁止头部列表。用户代理(即浏览器)对这些头部有完全控制,而非用户。对于这个推荐的同源检查来说,更重要的是有一些HTTP请求头不能被JavaScript设置,因为它们在“禁止”头部列表中。只有浏览器本身才能为这些头部设置值,使它们更加可信,因为甚至XSS漏洞也无法修改它们。
这里推荐的源头检查依赖于这三个受保护的头部:Origin、Referer和Host,使其成为一个相当强大的CSRF防御机制。