【文章标题】从HTTP协议分析转发和重定向的区别
【文章作者】曾健生
【作者邮箱】zengjiansheng1@126.com
【作者QQ】190678908
【作者MSN】zengjiansheng1@hotmail.com
【作者博客】blog.csdn.net/newjueqi
*******************************************************************************
本文主要是通过截取HTTP包的数据,分析java Web开发中的转发和重定向的区别。
第一步,编写一个简单的Servlet,URL为http://pc-200908141013:8080/Demo/servlet/SendURL,代码如下:
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//转发
req.getRequestDispatcher("/Test.html").forward( req, resp );
//重定向
//resp.sendRedirect("/Demo/Test.html");
}
第二步:运行Tomcat,在浏览器中输入http://pc-200908141013:8080/Demo/servlet/SendURL,用HttpWatch截取HTTP的信息,得到转发的HTTP信息如下图:
图1
第三步:把servlet中转发的代码注释,把重定向的代码的注释去掉,再次访问,用HttpWatch截取HTTP的信息,截获了两次HTTP的信息,如下两张图:
图2
图3
由图1,图2,图3可知,
转发是直接是返回http://pc-200908141013:8080/Demo/Test.html的内容。
重定向是有两次响应数据的,第一次返回的是302状态码,要求浏览器访问Location头的http://pc-200908141013:8080/Demo/Test.html的链接地址,第二次返回的是http://pc-200908141013:8080/Demo/Test.html的内容。