zl程序教程

您现在的位置是:首页 >  工具

当前栏目

重定向和转发的区别及应用_重定向发给别人能看见吗

应用重定向 区别 转发 别人 看见 发给
2023-06-13 09:13:45 时间

大家好,又见面了,我是你们的朋友全栈君。

重定向和转发的区别:

重定向的编码是 302; 转发的编码是307;

一:重定向与转发的区别 1.重定向过程: 客户端浏览器发送http请求 → web服务器接收后发送30X状态码响应及对应新的location给客户浏览器 → 客户浏览器发现是30X响应,则自动再发送一个新的http请求,请求url是新的location地址 → 服务器根据此请求寻找资源并发送给客户。

//java代码示例
response.sendRedirect("xxx.jsp或者servlet");

2.转发过程: 客户端浏览器发送http请求 → web服务器接受此请求 → 调用内部的一个方法在容器内部完成请求处理和转发动作 → 将目标资源发送给客户。

//java代码示例
request.getRequestDispatcher("xxx.jsp或者servlet").forward(request,response);

二、转发和重定向对比:

转发

重定向

跳转方式

服务器端转发

客户端转发

客户端发送请求次数

1次

2次

客户端地址栏是否改变

不变

是否共享request域

共享

不共享(request域中的数据丢失),必须使用session传递属性

是否共享response域

共享

不共享

范围

网站内

可以跨站点

JSP

URL不可带参数

URL可带参数

是否隐藏路径

隐藏

不隐藏

三、什么时候使用重定向,什么时候使用转发? 原则上: 要保持request域的数据时使用转发,要访问外站资源的时候用重定向,其余随便; 特殊的应用: 对数据进行修改、删除、添加操作的时候,应该用response.sendRedirect()。如果是采用了request.getRequestDispatcher().forward(request,response),那么操作前后的地址栏都不会发生改变,仍然是修改的控制器,如果此时再对当前页面刷新的话,就会重新发送一次请求对数据进行修改,这也就是有的人在刷新一次页面就增加一条数据的原因。

四、转发与重定向的安全性 转发安全性: 在服务器内部实现跳转,客户端不知道跳转路径,相对来说比较安全。 重定向安全性: 客户端参与到跳转流程,给攻击者带来了攻击入口,受威胁的可能性较大。比如一个HTTP参数包含URL,Web应用程序将请求重定向到这个URL,攻击者可以通过修改这个参数,引导用户到恶意站点,并且通过将恶意域名进行十六进制编码,一般用户很难识别这是什么样的URL;或者指引到该网站的管理员界面,如果访问控制没有做好将导致一般用户可以直接进入管理界面。

五、调用方式 我们知道,在servlet中调用转发、重定向的语句如下:

request.getRequestDispatcher(“new.jsp”).forward(request, response); //转发到new.jsp

response.sendRedirect(“new.jsp”); //重定向到new.jsp

在jsp页面中你也会看到通过下面的方式实现转发: <jsp:forward page=“apage.jsp” />

当然也可以在jsp页面中实现重定向: <%response.sendRedirect(“new.jsp”); %> //重定向到new.jsp

六、总结区别 1.转发是服务器行为,重定向是客户端行为 2.重定向是两次请求的过程,而转发只有一次.由此可见重定向是由浏览器完成的,转发是服务器内部完成的。 3.在重定向的过程中,传输的信息会被丢失。 转发中传输的信息不会丢失。 4.重定向会改变地址栏的内容,转发不会

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。