重定向与转发的区别与应用
一、重定向与转发的区别
转发过程: 客户端浏览器发送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
重定向与转发的区别与应用相关推荐
- struts result type redirect 重定向和转发的区别
我们在使用struts2进行配置struts.xml的时候,<result>中有个tyep属性用来配置跳转类型 默认不写时tyep="dispatcher",我们可以根 ...
- 重定向和转发的区别+使用情景
重定向和转发的区别: // 重定向 response.sendRedirect("xxx.jsp或者servlet"); // 转发 request.getRequestDispa ...
- javaweb重定向和转发的区别
JavaWeb学习随记 重定向与转发的区别(面试题) 相同点 页面都会实现跳转 不同点 请求转发的时候,url不会产生变化 重定向时候,url地址栏会发生变化 简单的重定向代码: resp.sendR ...
- JSP重定向和转发的区别
一.重定向和转发的区别 response.sendRedirect()――重定向 它是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个 ...
- springmvc - 重定向与转发的区别
重定向与转发的区别: 1.重定向访问服务器两次,转发只访问服务器一次. 2.转发页面的URL不会改变,而重定向地址会改变 3.转发只能转发到自己的web应用内,重定向可以重定义到任意资源路径. 4.转 ...
- mark一下总是记混的重定向与转发的区别
forward内部跳转 和redirect重定向跳转的区别 1).从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发 ...
- 详解java重定向和转发的区别
重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程. 与之相反,重定向方式的含义是第一个页面通知浏览器发送 ...
- 重定向和转发的区别及应用
重定向 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程. 与之相反,重定向方式的含义是第一个页面通知浏 ...
- 关于重定向和转发的区别
请求转发 1请求 2请求 3响应 4响应 客户端 服务A 服务B 请求重定向转发 1请求 2响应 3请求 4响应 客户端 服务A 服务B 上面两个图是重定向和转发实际中的执行流程图,根据流程图看区别与 ...
最新文章
- 利用函数来得到所有子节点号 利用函数来取得最高级的节点号
- 爬虫实战:要不是热爱学习,谁会爬小姐姐。分析Ajax来爬取今日头条街拍美图(python)
- 24.内存操作Copy-Move-Clone.rs
- 微软 word转换pdf_如何将行转换为Microsoft Word表中的列
- HTML基础(2)——边框
- csv文件怎么转成excel_Python操作Excel文件(1):花式大师pyexcel
- Java多线程概念(一)
- php安装调式redis扩展,下载安装thinkphp5.0,调试Redis是否可以正常使用
- python抓取天气预报_抓取天气预报的代码(Python)
- html svg 编辑器
- docker之SonarQube集成阿里p3c规则
- 一些比较舒服的rgb配色 (含rgb值,可参考)
- 趁年轻,我们干点什么吧
- 我的世界虚无2可直连服务器IP,我的世界虚无世界服务器1.7.10
- 使用Pr CS6剪视频导入的视频中音频一直出现“在试图写入下列文件时发生了错误…”提示在右下角。?
- c语言win32api勾取,第一次用C语言+win32api写窗体应用程序,晕死了
- 慧算账渠道发力增值服务初露锋芒
- 好物推荐 | 小明医声家庭健康初体验
- 哈师大计算机学院2016级新生,【通知公告】哈尔滨师范大学2016—2017学年度国家励志奖学金获奖学生初审名单公示...
- [MachineLearning]模型评估与模型选择