一、重定向与转发的区别

转发过程: 客户端浏览器发送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

重定向与转发的区别与应用相关推荐

  1. struts result type redirect 重定向和转发的区别

    我们在使用struts2进行配置struts.xml的时候,<result>中有个tyep属性用来配置跳转类型 默认不写时tyep="dispatcher",我们可以根 ...

  2. 重定向和转发的区别+使用情景

    重定向和转发的区别: // 重定向 response.sendRedirect("xxx.jsp或者servlet"); // 转发 request.getRequestDispa ...

  3. javaweb重定向和转发的区别

    JavaWeb学习随记 重定向与转发的区别(面试题) 相同点 页面都会实现跳转 不同点 请求转发的时候,url不会产生变化 重定向时候,url地址栏会发生变化 简单的重定向代码: resp.sendR ...

  4. JSP重定向和转发的区别

    一.重定向和转发的区别 response.sendRedirect()――重定向 它是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个 ...

  5. springmvc - 重定向与转发的区别

    重定向与转发的区别: 1.重定向访问服务器两次,转发只访问服务器一次. 2.转发页面的URL不会改变,而重定向地址会改变 3.转发只能转发到自己的web应用内,重定向可以重定义到任意资源路径. 4.转 ...

  6. mark一下总是记混的重定向与转发的区别

    forward内部跳转 和redirect重定向跳转的区别 1).从地址栏显示来说  forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发 ...

  7. 详解java重定向和转发的区别

    重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程. 与之相反,重定向方式的含义是第一个页面通知浏览器发送 ...

  8. 重定向和转发的区别及应用

    重定向 重定向和转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程. 与之相反,重定向方式的含义是第一个页面通知浏 ...

  9. 关于重定向和转发的区别

    请求转发 1请求 2请求 3响应 4响应 客户端 服务A 服务B 请求重定向转发 1请求 2响应 3请求 4响应 客户端 服务A 服务B 上面两个图是重定向和转发实际中的执行流程图,根据流程图看区别与 ...

最新文章

  1. 利用函数来得到所有子节点号 利用函数来取得最高级的节点号
  2. 爬虫实战:要不是热爱学习,谁会爬小姐姐。分析Ajax来爬取今日头条街拍美图(python)
  3. 24.内存操作Copy-Move-Clone.rs
  4. 微软 word转换pdf_如何将行转换为Microsoft Word表中的列
  5. HTML基础(2)——边框
  6. csv文件怎么转成excel_Python操作Excel文件(1):花式大师pyexcel
  7. Java多线程概念(一)
  8. php安装调式redis扩展,下载安装thinkphp5.0,调试Redis是否可以正常使用
  9. python抓取天气预报_抓取天气预报的代码(Python)
  10. html svg 编辑器
  11. docker之SonarQube集成阿里p3c规则
  12. 一些比较舒服的rgb配色 (含rgb值,可参考)
  13. 趁年轻,我们干点什么吧
  14. 我的世界虚无2可直连服务器IP,我的世界虚无世界服务器1.7.10
  15. 使用Pr CS6剪视频导入的视频中音频一直出现“在试图写入下列文件时发生了错误…”提示在右下角。?
  16. c语言win32api勾取,第一次用C语言+win32api写窗体应用程序,晕死了
  17. 慧算账渠道发力增值服务初露锋芒
  18. 好物推荐 | 小明医声家庭健康初体验
  19. 哈师大计算机学院2016级新生,【通知公告】哈尔滨师范大学2016—2017学年度国家励志奖学金获奖学生初审名单公示...
  20. [MachineLearning]模型评估与模型选择

热门文章

  1. item_get - 获得EBAY商品详情
  2. linux 非正常关机日志,非法关机铁血教训
  3. 时间序列模型分类及应用
  4. html正则匹配img src,匹配img标签及img 的src的正则表达式
  5. C语言、C标准库、glibc、Linux内核 之间的关系
  6. C++之中的友元函数的作用
  7. CRM依旧蓝海 高端市场潜能远没被发掘
  8. 期望E,方差D,协方差Cov,主成分分析PCA
  9. cypher 查询语句
  10. 直播间搭建一定要加入的三个功能,机制介绍与优势分析