JSP转发和重定向之间的区别

Amm*_*mmu 73 redirect jsp servlets forward

请解释之间的差异jsp:forwardredirect.
每种情况都发生了什么?

Boz*_*zho 140

  • redirect将响应状态设置为302 [1],并在Location标头中设置新的url ,并将响应发送给浏览器.然后,根据http规范,浏览器向新URL发出另一个请求

  • 转发完全发生在服务器上.servlet容器只是将相同的请求转发到目标URL,而浏览器不知道这一点.因此,在处理新URL时,您可以使用相同的请求属性和相同的请求参数.并且浏览器不会知道网址已更改(因为它完全发生在服务器上)


[1]:这是与标准相矛盾的行业惯例的一个例子.HTTP/1.0规范(RFC 1945)要求客户端执行临时重定向(原始描述短语是"暂时移动"),但是流行的浏览器实现302具有303 See Other的功能.因此,HTTP/1.1添加了状态代码303和307来区分这两种行为.但是,某些Web应用程序和框架使用302状态代码,就好像它是303. Source

  • 是的,它将保持不变,因为浏览器不知道更改 (5认同)

Sob*_*bik 37

我听说过重定向和前进的有趣解释.想象一下,你需要来自你朋友的一些服务.它与什么服务无关.假设你的朋友无法帮助你,但知道谁可以.

如果他告诉你,他会改变你的要求:"我无法处理这个,但知道谁可以.这是他的电话号码.打电话给他"

如果他告诉你,他会提出你的要求:"没问题"并且在没有注意到你让另一个人处理你的愿望的情况下自己打电话给那个人.那么你的朋友将得到你的愿望并传达给你的结果


rma*_*nus 11

与转发相比,重定向也较慢,因为它必须通过浏览器并等待浏览器发出新请求,因此导致请求范围对象在重定向后不可用.


Nis*_*ant 6

重定向:

  1. 用户请求资源.
  2. 响应发送给用户.
  3. 这不是请求的资源,这是HTTP代码302的响应,并包含所请求资源的URL.
  4. URL可以与请求的URL相同或不同.
  5. 客户端浏览器使用新URL再次请求资源,这次将实际资源发送给用户.

向前:

它是向用户简单显示所请求资源的过程.它完全发生在服务器端.