在Phalcon中,重定向和调度的区别是什么?[英] what's the difference between redirect and dispatch in phalcon?

问题描述

当我想从另一个页面切换到一个页面时,我可以找到 $this->dispatcher->forward() 和 $this->response->redirect().两者似乎都工作正常.

它们之间有什么区别,我应该什么时候使用一个而不是另一个?

推荐答案

从广义上讲,Redirect 会做一个 http 重定向(带有标头位置).这意味着客户端的浏览器将更改页面.它处理到一个新的路由(它也可以用来去另一个网站),实际的脚本将结束.

而 Forward 是内部的,客户端的浏览器不会看到任何区别,您只需执行不同的控制器.调度循环允许用户将执行流程转发到另一个控制器/动作.这对于检查用户是否可以访问某些选项、将用户重定向到其他屏幕或只是重用代码非常有用.但是,请记住,进行"转发"与进行 HTTP 重定向不同.尽管他们显然得到了相同的结果."转发"不会重新加载当前页面,所有重定向都发生在一个请求中,而 HTTP 重定向需要两个请求才能完成.

类似的类比也可以用JSP来表示,

HttpServletResponse 的sendRedirect(String path) 方法会告诉客户端它应该向指定的路径发送请求.因此客户端将构建一个新请求并将其提交给服务器.客户端的历史记录将被更新,因此前进和后退按钮将起作用.此方法对于重定向到其他服务器和域上的页面很有用.

RequestDispatcher 的 forward 方法会将其传递的 ServletRequest 和 ServletResponse 转发到 getRequestDispatcher(String path). 中指定的路径 响应不会发送回客户端,因此客户端不会了解服务器上资源的这种变化.此方法对于服务器资源之间的通信(servlet 到 servlet)很有用.此方法比使用 sendRedirect 更快,因为不需要到服务器和返回的网络往返.

本文地址:https://www.itbaoku.cn/post/1739782.html