request.getHeader(“referer”)如何与Forward和Redirects一起使用?

时间:2013-08-20 08:50:55

标签: servlets

我有一个servlet。我正在以http://someDomain/MyServlet/URLPattern命中这个servlet。 在这个servlet的doGet方法中,我转发到JSP 页面存在于WEB-INF文件夹下。以下是代码,

request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);

在index.jsp页面中,我使用POST方法访问另一个URL(servlet)。

在目标servlet的doPost方法中,使用referer

获取request.getHeader("referer"))

这会将值打印为

http://someDomain/MyServlet/URLPattern

我认为它会返回http://someDomain/../index.jsp,因为这是 触发目标网址的实际点。

我想了解这种行为。如果有人可以获得授权来源的回答 在它解释行为的地方,它会有很大的帮助。

以上问题与forward的行为有关。会是什么行为 对于sendRedirect以及referer会持有什么价值?

1 个答案:

答案 0 :(得分:3)

前进完全发生在服务器端,浏览器并不知道并关心它。

转发就像服务器端逻辑中的内部方法调用一样。所以,你在URL http://someDomain/MyServlet/URLPattern,并且使用多个服务器端组件(servlet,JSP)来回答浏览器发送的唯一GET请求到URL http://someDomain/MyServlet/URLPattern

浏览器唯一知道的是它向此URL发送了一个GET请求,并得到了回复。因此,下一个请求的引荐来源将是此URL。

为了比喻,让我们说你在亚马逊买书,我问你:你在哪里买这本书?您将在亚马逊"而不是#34;在亚马逊旧金山库房#5的#453处回答,因为那不关你的事:只有亚马逊知道这一点。你在亚马逊买了一本书,拿到了这本书。亚马逊在内部向你发送这本书的内容尚不清楚。

在这个故事中,您是浏览器,而亚马逊是服务器。

sendRedirect()完全不同。您向服务器发送第一个请求,该服务器使用sendRedirect()来修改包含指向另一个URL的Location标头的HTTP响应。然后,浏览器向另一个URL发送第二个请求。