requestDispatcher与sendRedirect区别
一、重定向与转发的区别
转发过程: 客户端浏览器发送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区别相关推荐
- Servlet学习笔记(四)之请求转发与重定向(RequestDispatcher与sendRedirect)
ServletContext可以实现请求转发(ServletContext请求转发相关内容见之前博客:http://blog.csdn.net/megustas_jjc/article/details ...
- forword和sendRedirect区别
forword和sendRedirect区别 forword forword()方法是转发,sendRedirect是重定向. 1)浏览器访问Servlet1: 2)Servlet1想让Servlet ...
- HttpServletResponse.sendRedirect和RequestDispatcher.foward的区别(重定向与转发)
foward只能在同一个Web应用内转发,相对URL为"/"时是相对于当前Web应用程序的根目录. sendRedirect可以重定向到同一Web站点上的其他Web应用上,相对UR ...
- Servlet转发forward和重定向response.sendRedirect()区别
转发(forward):浏览器地址不会改变,始终是同一个请求.执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址.forward是内部重定向. 重定向(send ...
- JSP中重定向与转发的区别
转发 request.getRequestDispatcher().forward(request,response) 重定向 response.sendRedirect ...
- JSP与servlet之间的传值方式
总结JSP与servlet之间的传值 JSP与 servlet之间的传值有两种情况:JSP -> servlet, servlet -> JSP. 通过对象 request和 se ...
- java基础知识精华总结 java面试题 深圳酷琪 kuuqii.com 电脑配件软件 硬件一体化采购平台
1.文件拷贝,把一个文件的内容拷贝到另外一个文件里 package order; import java.io.File; import java.io.FileInputStream; import ...
- JavaEE面试题库分类及答案之一
第一部分Jsp&servlet 1 三个Statment区别,用法 statement对象作为最基本的数据操作对象,可以应用于几乎所有的数据库,但是由于运行时使用的是字符串连接技术,所以存在安 ...
- Jsp与Servlet之间传值方式
JSP与servlet之间的传值方式 JSP与 servlet之间的传值有两种情况:JSP -> servlet, servlet -> JSP. 通过对象 request和 sessio ...
最新文章
- python脚本设置linux环境变量_Linux环境变量export方法与修改文件方法的区别
- Vue 组件库 HeyUI@1.16.0 更新日志
- 制作一个简易的QQ×××
- js中的new file_深受 Pandas 启发的 JavaScript 开源库 — Danfo.js 现已推出!
- unit 11 文档练习
- 百万农民创大业-农业大健康:产业融合谋定振兴乡村唱大戏
- 【tensorflow】tf-tf.where(condition, x, y, name)
- 【亲测好用!】Centos6.5安装Sublime text 3-----可创建桌面图标
- 祝大家七夕快乐,邀你源码共读,顺带发点红包
- thinkphp单入口和多入口的访问方法
- C++学习系列笔记(八)
- 怎样使用PDFlib显示简体中文输出中文而不出现空白说明附源码
- 跳过 Xcode 下载 iOS 模拟器
- H5 游戏 俄罗斯方块 双人互动游戏
- 解决SQL Server数据库维护计划失败的问题
- 网易企业邮箱 服务器 端口,网易企业邮箱客户端——Thunderbird设置
- SHERlocked93 的 2019 年终总结
- 【数字图像处理】二值图像行程编码
- matlab射线平均速度时距曲线,时距曲线实验
- 更加简洁易用——wangEditor富文本编辑器新版本发布