request.getHeader(“referer”),比后退按钮重新加载页面

时间:2012-05-28 22:35:05

标签: jsp servlets back http-referer

JSP1链接到JSP2。

JSP2调用一个servlet,它执行一些操作并以:

结束
response.sendRedirect(request.getHeader("referer"));
return;

此时我回到了JSP2。 问题是从那里按下浏览器后退按钮,页面只是重新加载自己而不是返回到JSP1。 这是正确的,因为sendRedirect会在历史记录中添加一个条目。

但我想回到JSP1。 有什么提示吗?

1 个答案:

答案 0 :(得分:5)

出于各种敏感原因,您根本不应该依赖控制器操作中的referrer标头。你已经找到了至少一个。此标头并非始终由客户端发送,或者其值实际上可能并不代表真正的引荐来源。某些浏览器,代理甚至防病毒配置可能隐藏,更改甚至混淆引用者标头。出于统计目的,最高使用它。

而是将from作为请求参数传递,

<input type="hidden" name="from" value="${pageContext.request.requestURI}" />

使用此逻辑(省略验证)

response.sendRedirect(request.getParameter("from"));

或者,更好的是,如果它总是基于其他请求参数的同一个JSP,只需在服务器端硬编码/配置它。