一、重定向与转发的区别

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

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

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

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

转发和重定向对比:

转发 重定向
跳转方式 服务器端转发 客户端转发
客户端发送请求次数 1次 2次
客户端地址栏是否改变 不变
是否共享request域 共享 不共享(request域中的数据丢失),必须使用session传递属性
是否共享response域 共享 不共享
范围 网站内 可以跨站点
JSP URL不可带参数 URL可带参数
是否隐藏路径 隐藏 不隐藏

二、什么时候使用重定向,什么时候使用转发?

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

三、转发与重定向的安全性

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


参考:
1、Servlet的内部跳转与重定向跳转的区别与用法
2、Request和Response的区别
3、Web应用安全与防治 —— 基于OWASP Top10与ESAPI


http://www.taodudu.cc/news/show-3540901.html

相关文章:

  • mac查看cpu核数
  • Linux查看系统 CPU 核数
  • 限制tensorflow使用Cpu核数
  • java查看cpu核数以及jvm内存
  • 查看服务器CPU核数
  • [Ubuntu] 查看 CPU 核数
  • ubuntu 查看 CPU 核数
  • 查询Linux cpu 核数
  • linux cpu核数查看
  • 【cpu概念】物理cpu个数、核数、逻辑cpu数的概念
  • window命令查看cpu核数_如何查看win10系统CPU核数?
  • 关于cpu逻辑核数、物理核数、核数的理解
  • CentOS7查看CPU核数
  • cpu的核数和进程_CPU核数和线程数有什么用?什么意思?CPU核数和线程的关系与区别...
  • linux服务器的核数,Linux服务器CPU核数理解
  • cpu核数(cpu核数和频率哪个重要)
  • C/C++获取CPU核数
  • Linux通过编程获取CPU核数
  • Java 获取 CPU 核数
  • 编程linux 获取cpu核数,Linux命令查看以及编程获取CPU核数
  • linux下怎么查看cpu核数
  • linux系统查看电脑的核数,linux如何查看cpu核数
  • cpu个数核数查看 服务器_服务器如何查看cpu核数
  • CPU核数
  • linux java 查询cpu核数,linux java 查询cpu核数
  • oracle 查看cpu 个数,查看CPU核数
  • 如何查看cpu核数以及线程数
  • cpu核数和逻辑个数的区别_CPU逻辑核心数和物理核心数是什么意思?
  • 最新版本Redis:Redis 7.0 安装使用,Docke启动Redis,Redis使用场景-2022年最新Redis图解安装
  • Redis的基本用法以及场景分析

requestDispatcher与sendRedirect区别相关推荐

  1. Servlet学习笔记(四)之请求转发与重定向(RequestDispatcher与sendRedirect)

    ServletContext可以实现请求转发(ServletContext请求转发相关内容见之前博客:http://blog.csdn.net/megustas_jjc/article/details ...

  2. forword和sendRedirect区别

    forword和sendRedirect区别 forword forword()方法是转发,sendRedirect是重定向. 1)浏览器访问Servlet1: 2)Servlet1想让Servlet ...

  3. HttpServletResponse.sendRedirect和RequestDispatcher.foward的区别(重定向与转发)

    foward只能在同一个Web应用内转发,相对URL为"/"时是相对于当前Web应用程序的根目录. sendRedirect可以重定向到同一Web站点上的其他Web应用上,相对UR ...

  4. Servlet转发forward和重定向response.sendRedirect()区别

    转发(forward):浏览器地址不会改变,始终是同一个请求.执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址.forward是内部重定向. 重定向(send ...

  5. JSP中重定向与转发的区别

    转发        request.getRequestDispatcher().forward(request,response) 重定向         response.sendRedirect ...

  6. JSP与servlet之间的传值方式

        总结JSP与servlet之间的传值 JSP与 servlet之间的传值有两种情况:JSP -> servlet, servlet -> JSP. 通过对象 request和 se ...

  7. java基础知识精华总结 java面试题 深圳酷琪 kuuqii.com 电脑配件软件 硬件一体化采购平台

    1.文件拷贝,把一个文件的内容拷贝到另外一个文件里 package order; import java.io.File; import java.io.FileInputStream; import ...

  8. JavaEE面试题库分类及答案之一

    第一部分Jsp&servlet 1 三个Statment区别,用法 statement对象作为最基本的数据操作对象,可以应用于几乎所有的数据库,但是由于运行时使用的是字符串连接技术,所以存在安 ...

  9. Jsp与Servlet之间传值方式

    JSP与servlet之间的传值方式 JSP与 servlet之间的传值有两种情况:JSP -> servlet, servlet -> JSP. 通过对象 request和 sessio ...

最新文章

  1. python脚本设置linux环境变量_Linux环境变量export方法与修改文件方法的区别
  2. Vue 组件库 HeyUI@1.16.0 更新日志
  3. 制作一个简易的QQ×××
  4. js中的new file_深受 Pandas 启发的 JavaScript 开源库 — Danfo.js 现已推出!
  5. unit 11 文档练习
  6. 百万农民创大业-农业大健康:产业融合谋定振兴乡村唱大戏
  7. 【tensorflow】tf-tf.where(condition, x, y, name)
  8. 【亲测好用!】Centos6.5安装Sublime text 3-----可创建桌面图标
  9. 祝大家七夕快乐,邀你源码共读,顺带发点红包
  10. thinkphp单入口和多入口的访问方法
  11. C++学习系列笔记(八)
  12. 怎样使用PDFlib显示简体中文输出中文而不出现空白说明附源码
  13. 跳过 Xcode 下载 iOS 模拟器
  14. H5 游戏 俄罗斯方块 双人互动游戏
  15. 解决SQL Server数据库维护计划失败的问题
  16. 网易企业邮箱 服务器 端口,网易企业邮箱客户端——Thunderbird设置
  17. SHERlocked93 的 2019 年终总结
  18. 【数字图像处理】二值图像行程编码
  19. matlab射线平均速度时距曲线,时距曲线实验
  20. 更加简洁易用——wangEditor富文本编辑器新版本发布

热门文章

  1. 指为服务器指定超时时限为5分钟,微信服务器连接公众号开发者服务器时发生超时,超时时间为5秒,这是什么问题引起的?...
  2. 这种方法学习3ds max,做图容易,上手快
  3. 京东成为企业扶贫第一品牌,只因刘强东出身贫寒?
  4. 使用手机摄像头实现视频监控实时播放
  5. mysql建表 外键_mysql建表外键怎么设
  6. Xavier配置pytorth
  7. 二叉树部分: 种类,定义,遍历方法
  8. 怪兽充电们的钱途难题,IPO来解?
  9. 【长期目标】用倒推法设立目标
  10. 阿里云Workbench root用户连接和Workbench一键连接区别