phalcon 中的重定向和调度有什么区别?
what's the difference between redirect and dispatch in phalcon?
当我想从另一个页面切换到另一个页面时,我可以找到 $this->dispatcher->forward()
和 $this->response->redirect()
。两者似乎都可以正常工作。
它们之间有什么区别,什么时候应该使用一个而不是另一个?
一般来说,Redirect
将进行 http 重定向(使用 header 位置)。这意味着客户端的浏览器将更改页面。它处理到一个新的路由(它也可以用来去另一个网站)并且实际的脚本将结束。
而 Forward
是内部的,客户端的浏览器不会看到任何差异,您只需执行不同的 controller.The 调度循环允许用户将执行流程转发给另一个 controller/action.这对于检查用户是否可以访问某些选项、将用户重定向到其他屏幕或简单地重用代码非常有用。但是,请记住,进行“转发”与进行 HTTP 重定向不同。尽管他们显然得到了相同的结果。 “转发”不会重新加载当前页面,所有重定向都发生在单个请求中,而 HTTP 重定向需要两次请求才能完成。
类似的类比也可以用JSP表示,
HttpServletResponse
的sendRedirect(String path)
方法会告诉客户端应该向指定路径发送请求。所以客户端会构建一个新的请求并提交给服务器。客户端的历史记录将被更新,因此前进和后退按钮将起作用。此方法对于重定向到其他服务器和域上的页面很有用。
RequestDispatcher
的forward方法将把它传递的ServletRequest
和ServletResponse
转发到getRequestDispatcher(String path).
中指定的路径,不会发送响应返回给客户端,因此客户端不会知道服务器上资源的这种变化。此方法对于服务器资源(servlet 到 servlet)之间的通信很有用。此方法比使用 sendRedirect
更快,因为不需要往返于服务器的网络往返。
当我想从另一个页面切换到另一个页面时,我可以找到 $this->dispatcher->forward()
和 $this->response->redirect()
。两者似乎都可以正常工作。
它们之间有什么区别,什么时候应该使用一个而不是另一个?
一般来说,Redirect
将进行 http 重定向(使用 header 位置)。这意味着客户端的浏览器将更改页面。它处理到一个新的路由(它也可以用来去另一个网站)并且实际的脚本将结束。
而 Forward
是内部的,客户端的浏览器不会看到任何差异,您只需执行不同的 controller.The 调度循环允许用户将执行流程转发给另一个 controller/action.这对于检查用户是否可以访问某些选项、将用户重定向到其他屏幕或简单地重用代码非常有用。但是,请记住,进行“转发”与进行 HTTP 重定向不同。尽管他们显然得到了相同的结果。 “转发”不会重新加载当前页面,所有重定向都发生在单个请求中,而 HTTP 重定向需要两次请求才能完成。
类似的类比也可以用JSP表示,
HttpServletResponse
的sendRedirect(String path)
方法会告诉客户端应该向指定路径发送请求。所以客户端会构建一个新的请求并提交给服务器。客户端的历史记录将被更新,因此前进和后退按钮将起作用。此方法对于重定向到其他服务器和域上的页面很有用。
RequestDispatcher
的forward方法将把它传递的ServletRequest
和ServletResponse
转发到getRequestDispatcher(String path).
中指定的路径,不会发送响应返回给客户端,因此客户端不会知道服务器上资源的这种变化。此方法对于服务器资源(servlet 到 servlet)之间的通信很有用。此方法比使用 sendRedirect
更快,因为不需要往返于服务器的网络往返。