您的位置:首页 > 理论基础 > 计算机网络

HTTP通信中的请求转发和请求重定向

2015-08-14 19:21 423 查看
HTTP通信中的请求转发和请求重定向

在HTTP通信和Java Web开发中,经常会用到请求转发和请求重定向,它们两个有很大的区别:
首先,请求转发是指:一个Web资源在收到一个客户端的请求后,去掉用另外一个资源进行处理,这个过程请称为请求转发。很明显,请求转发是发生在Web服务器端的,客户发发出Request,服务端在内部进行forward,然后把最终的结果Response给客户端。
请求重定向则是一个交互的过程,一个Client在请求服务器的过程中,服务器通知Client去访问另一个资源称为请求重定向,服务器在Response头中会加入Location字段,客户端在收到这个Response后发现有Location字段,则就重新向Location指定的URL重新发送一次请求。
在Servlet中,请求转发的典型用法是:
request.getRequestDispatcher(arg0).forward(request,response);
从上面代码可以看出,一个资源收到了一个request,然后调用它的getRequestDispatcher函数,来找到另一个资源,再通过forward方法把原始的request和response传过去。对Client来讲,它只发送了一次请求,得到了一次回应。
请求重定向的使用代码如下:
response.sendRedirect(arg0);

很明显可以看出,重定向是发生在response中,sendRedirect方法就是在HTTP协议响头中添加Location字段。

关于请求转发和请求重定向,还有如下细节区别:
1. RequestDispatcher.forward方法只能将请求转发到同一Web站点的其它组件,而HttpServletResponse.sendRedirect方法不仅可以将请求重定向到同一Web站点的其它资源,还可以仅用绝对的URL 地址重定向到别的站点。
2. 浏览器发出请求后,HttpServletResponse.sendRedirect直接做出响应,响应的内容就是重定向到另一个URL,而RequestDispatcher.forward方法去将请求转发给另一个资源,另一个资源处理后,再将处理的结果返回给浏览器。
3. 请求重定向发生后,浏览器地址栏中的URL发生变化,由初始请求的URL变为重定向后的URL。请求转发的过程中,浏览器地址栏中的URL并未发生变化,浏览器不知道服务器器做了什么事情。
4. 对于RequestDispatcher.forward方法,调用者和被调用者共享同一个request对像和response对像,它们处理的是同一个请求和响应的过程。对于sendRedirect方法,调用者和被调用者使用的是各自的request对像和response对像,它们属于两个独立的请求和响应过程。
5. sendRedirect方法的相对URL以“/”开头表示相对于整个WEB站点的根目录,RequestDispatcher对像的相对URL以“/”开头表示当前WEB应用的根目录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: