gpt4 book ai didi

servlets - request.getHeader ("referer") 如何与转发和重定向一起使用?

转载 作者:行者123 更新时间:2023-12-02 00:06:07 26 4
gpt4 key购买 nike

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

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

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

在目标 servlet 的 doPost 方法中,正在使用 request.getHeader("referer"))获取 referer

这会将值打印为

http://someDomain/MyServlet/URLPattern

我认为它会返回 http://someDomain/../index.jsp 因为这是对目标 URL 进行触发的实际点。

我想了解这种行为。如果有人可以从授权来源得到答案解释行为的地方会有很大帮助。

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

最佳答案

转发完全发生在服务器端,浏览器不知道也不关心它。

转发就像服务器端逻辑中的内部方法调用。因此,您在 URL http://someDomain/MyServlet/URLPattern 处,多个服务器端组件(一个 servlet、一个 JSP)用于响应浏览器发送的唯一 GET 请求, 到 URL http://someDomain/MyServlet/URLPattern

浏览器唯一知道的是它向这个 URL 发送了 GET 请求,并得到了响应。所以下一个请求的 referrer 将是这个 URL。

打个比方,假设你在亚马逊买了一本书,我问你:那本书你在哪里买的?你会回答“在亚马逊”,而不是“在亚马逊旧金山 5 号仓库的 453 号房间,因为那不关你的事:只有亚马逊知道。你在亚马逊买了一本书,并得到了这本书. 亚马逊内部如何向您发送这本书是未知的。

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

sendRedirect() 则完全不同。您向服务器发送第一个请求,服务器使用 sendRedirect() 向您发送一个包含指向另一个 URL 的 Location header 的 HTTP 响应。然后,浏览器向这个其他 URL 发送第二个请求。

关于servlets - request.getHeader ("referer") 如何与转发和重定向一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18330797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com