本文中,我们将借助http分析工具Fiddler,来对Response.Redirect()方法的整个流程进行剖析

首先在Visual Studio中新建一个网站,在Default页面的Page_Load事件中写下Response.Redirect("http://www.baidu.com");

然后添加一个Page_LoadComplete事件处理方法。

最终效果如下:

在12和17行设置了断点,方便对整个过程进行观察。

打开Fiddler,用以观察整个过程中的HTTP数据。

点击“调试”按钮

程序开始执行。

这时Fiddler中出现了一条数据:

这是浏览器向http://localhost:53765/WebSite2/Default.aspx 发出了一个GET请求。

这条THHP GET请求导致服务器端的程序开始执行,执行到12行时遇到断点,于是停下,此时还没有执行Response.Redirect语句。

这时候服务器还没有对刚才浏览器发出的请求作出响应,所以在Fiddler中,并没有读到这次HTTP请求的响应。

然后我在服务器端按F5,使程序继续执行。当程序执行了Response.Redirect语句之后,在Fiddler中收到了服务器端的回应。

很明显,服务器端并没有返回给我们页面的Default页面的html数据,而是给了一个302 Found,并在Location中给出了“http://www.baidu.com”, 这就是在告诉浏览器:请重新发出一个HTTP请求,所请求的URL为"http://www.baidu.com"

浏览器于是按照吩咐,重新发出了一个http的请求

这次是向百度的服务器发出了一个GET请求。

然后百度返回了如下数据:

这次是200 OK,content-type 是html,后边跟的是百度主页的html代码

然后浏览器根据这个返回数据,解析html代码,在我们的屏幕上将百度的样子显示了出来

并且,这个过程中我们注意到:Page_LoadComplete()方法并没有被执行,这说明当服务器执行到Response.Redirect语句时,会立即中断页面的生命周期,直接向客户端返回信息,让客户端进行重定向操作。

整个过程就是这样了。

另外

ASP.NET 4 增加了一个RedirectPermanent方法,该方法同样是重定向,但生成的HTTP响应状态不是上边所演示的302,而是301(永久跳转)

301是对搜索引擎最友好的重定向方式。

那么什么叫做对搜索引擎友好呢?

比如你有个网站http://www.foo.com ,当人们访问http://www.foo.com 这个URL时,你就把他们重定向到http://www.foo.com/widgets/,那么当搜索引擎爬到http:www.foo.com这个网址时,如果它不能很好地跟随重定向,则它将认为http://www.foo.com页面时没有内容的,所以这个页面的排名将会非常靠后。

如果我们把一个地址采用301 跳转方式跳转的话,搜索引擎会把老地址的PageRank等信息带到新地址,同时在搜索引擎索引库中彻底废弃掉原先的老地址。

这只是很简单的叙述,其实关于搜索引擎友好的问题很复杂,欲了解更多请自行搜索之。

评论:
Response.Redirect的实质是抛了一个异常
从它中断生命周期来看,确实是抛了个异常。

Response.Redirect这种重定向方式有时候会出问题,尤其是当客户端不是桌面浏览器的时候。
Fiddler怎么配置成本机也可以检测
在localhost后面加个点Fiddler就能拦截请求了。例如:http://localhost.:3435/Login.aspx。就OK啦。
会报线程中止的错误,可以使用
Response.Redirect("URL",false);
第二个参数表示继续执行页面生命周期

ASP.NET中Response.Redirect()方法深度剖析相关推荐

  1. ASP.NET中String.IndexOf 方法的使用

      ASP.NET中String.IndexOf 方法的使用 收藏 String.IndexOf 方法 (value, [startIndex], [count]) 报告指定字符在此实例中的第一个匹配 ...

  2. 在ASP.NET中调用存储过程方法新解

    摘要 存储过程的调用在B/S系统中用的很多.传统的调用方法不仅速度慢,而且代码会随着存储过程的增多不断膨胀,难以维护.新的方法在一定程度上解决了这些问题. 关键词 ASP.NET:存储过程 在使用.N ...

  3. asp.net中的加密方法

    本文由chenyangASP版权所有,可以转载,复制,粘贴,并请注明出处,但不得修改! 无论什么时候只要我们使用数据库开发网站,我们就必须保护用户资料,这非常必要. 黑客可以盗窃口令,个人隐私遭到严重 ...

  4. 在ASP.NET中调用存储过程方法

    两种不同的存储过程调用方法 为了突出新方法的优点,首先介绍一下在.NET中调用存储过程的"官方"方法.另外,本文的所有示例程序均工作于SqlServer数据库上,其它情况类似,以后 ...

  5. 在ASP.NET中重写URL 方法三:在IIS7中使用HttpModule 实现无扩展名的URL重写

    上述的HttpModule方法在你要重写的URL含有.aspx 扩展名或者包含另一个被设置为ASP.NET处理的扩展名的情形下一切都工作.你这么做的话,不需要任何特定的服务器配置,你只要把你的应用拷贝 ...

  6. 关于百度编辑器UEditor在asp.net中的使用方法!

    为了完成自己想要的功能效果,在项目中使用到了百度编辑器,为了搞明白,苦心学习查资料搞了整整一天,总结一下. 在asp.net 的项目中目前我觉得有两种情况,一种是没有使用模板页的,一种是使用了模板页的 ...

  7. setcaptureproperty设置效果没有_【PPT】虚化效果在PPT中的创意设计制作深度剖析

    你好,我是陈西X. 首先,祝大家国庆假期玩得开心呀! 大家期待的一年一度的国庆假期终于到了,想必大家早就做好了安排啦. 说实话,我也早就做好了打算. 今年国庆假期,我打算去一趟火星,去看望一下我那移居 ...

  8. OpenCV中的imshow函数深度剖析

    imshow函数OpenCV官方注释文档有一部分如下: Displays an image in the specified window. The function imshow displays ...

  9. ASP.NET中的加密方法介绍

    以MD5为例(SHA1大致相同,只是使用的类不一样) MD5 相关类: System.Security.Cryptography.MD5 System.Security.Cryptography.MD ...

最新文章

  1. 干货 | XGBoost在携程搜索排序中的应用
  2. maven集成tomcat进行web应用测试
  3. Linux下rz/sz安装及使用方法
  4. CentOS 7下宿主机使用virsh console访问KVM的设置
  5. 源码mysql5.7安装过程_mysql5.7 源码安装步骤
  6. 蜗轮蜗杆计算软件_正确的组装蜗轮蜗杆减速机至关重要
  7. Python编程基础05:运算符与表达式
  8. 软件设计原则(三) 依赖倒置原则
  9. BOLT UI界面引擎是如何工作的?(BOLT UI入门教程)
  10. 职业规划报告!草草了事,看看得了
  11. JAVA实现网页版斗地主_Java实现斗地主最简代码实例
  12. 泛在电力物联网建设大纲ppt
  13. 征集对智能视觉组eIQ的使用反馈
  14. 177、模拟行走机器人
  15. 随机访问介质访问控制 —— ALOHA协议
  16. ubuntu22.04 耳机没声音 [已解决]
  17. Cumt2020九月校赛 by 水一水
  18. 网页打印宋体不支持加粗效果
  19. 工厂模式及什么时候用工厂模式
  20. kcl方程独立性的图论证明

热门文章

  1. C语言合并链表merge linked list(附完整源码)
  2. QT的QDBusPendingReply类的使用
  3. C++ Opengl绘制3D源码
  4. 神奇的机器人评课_《聪明的机器人》教学反思
  5. Apache Hive JdbcStorageHandler 编程入门指南
  6. Python基础概念_11_标准库
  7. Qt网络编程之UDP编程练习(20200219)
  8. Qt学习笔记之文件处理
  9. Quartus ii与Modelsim-altera 6.5b联调前仿真
  10. 简单的通讯录程序系统python