温故知新 .Net重定向深度分析

简介: 在早期的.NET Framework程序员心里,重定向Redirect其实分为两种:Response.Redirect:Response对象的Redirect方法提供了一种实现客户端重定向的方法Server.Transfer:Server对象的Transfer方法使用服务器执行重定向,并避免HTTP请求

在早期的.NET Framework程序员心里,重定向Redirect其实分为两种:


  • Response.Redirect:Response对象的Redirect方法提供了一种实现客户端重定向的方法


  • Server.Transfer:Server对象的Transfer方法使用服务器执行重定向,并避免HTTP请求


关键区别是发生转移的地方


c0c3a26d16a0f3fb6ec91db9babdd582.png



Client Redirect vs Server Redirect


Response.Redirect方法的默认行为:当前页面暂停执行,并向浏览器发送302响应码和新的跳转URL;


浏览器识别302响应并向跳转URL发起请求, 在network上会呈现两个请求:原始和新地址请求。


    Response.Redirect("http://www.news.com",false);   //  参数2控制当前页执行是否应该终止


    Server.Transfer 方法在服务器转向新的页面请求,并停止当前页面的执行;因为服务器不会将更改通知给客户端浏览器, 在network依旧呈现一个原始请求。


    由于页面地址在浏览器中不会更改,因此用户有可能会感觉异样。


      Server.Transfer("/default.aspx");//  由于使用了Web服务器的工作进程,因此Server.Transfer方法的目标URL必须是同一服务器上的虚拟路径,因此您不能使用包含“http”或“https”的地址

      ASP.NET MVC以至于.NET Core均淡化了服务端重定向的操作,可采用MVC Controller/Action替代


      合理选择重定向方式


      以上核心差异, 某些情况下需要合理选择重定向方式:


      ① 性能:直接的观感是 Response.Redirect相比Server.Transfer多引入了一个HTTP往返,后者可能有更好的性能, 实际上这个从来不是问题


      ② 基本安全性:某些时候对于新页面的请求地址可能要保密 ,Server.Transfer是在服务端请求,不会将请求的详情暴露在浏览器上。


      ③ 收藏夹:Server.Transfer在服务器上工作,用户虽收到新页面内容,但浏览器中的地址不会更新。因此,用户无法为某些页面添加书签。


      ④ AJAX用法:Server.Transfer方法缺乏与浏览器的交互,意味着它可能会破坏某些AJAX或JavaScript功能。  


      ⑤ Response.Redirect 能向所有Origin资源发起重定向;而Server.Transfer() 只能向web服务内资源重定向( 同Origin)。


      ⑥ 请求次数导致的问题 :Client Redirect是由先向浏览器响应302,在302响应的同时可追加某些信息以利于 后续重定向;而Server.Transfer() 对于浏览器而言只有一次请求, 这个差异可能是一个隐藏的分水岭。


      我们来分析标准单点登录CAS中发生的三次302重定向


      4bd423656a02191064c6c32512a02bda.png


      第一,二次重定向发生在SSO、website1不同域之间的重定向(其中第二次是Post请求之后302重定向),只能使用Client Redirect;


      第三次由http://www.website1.com?ticket=ST-OOOO-XXXX-OOOO 跳转回同站点的首页www.website1.com 也不能使用 Server.Transfer(),


      因为跳转后的首页部分资源依赖于302响应时写入的认证Cookie for website1,另外地址栏url未变化,不妥。


      HTTP 3XX响应码,傻傻分不清楚


      HTTP 3XX规范约定:永久/临时重定向前后的Method、Body是否变化。


      8f75a120d4a285be0dec3b40e17fadbc.png


      部分常见3xx响应码的常规用法:


      301 “永久移动”


         站点改版,比如我们在nginx中强制要求使用 HTTPS:


        server {        listen 80;        listen [::]:80;        server_name  www.website1.com;        return 301 https://$host$request_uri;    }


        302 “对象已移动”或“找到”


        如果附带目标URL,浏览器将发起重定向, 这也是目前口口相传应用最广泛的 重定向。


        307 “临时重定向”


        指示所请求的资源已被临时移动到Location标头提供的URL;


        307和302之间的唯一区别是307保证在发出重定向请求时,Method和Body不会更改,当重定向地址是非GET操作时,比302更好。


        总结


        本文简要分析了Client Redirect,Server Redirect的核心差异、使用场景;

        最后给出了HTTP 3XX响应码的标准规范。

        相关文章
        |
        8月前
        |
        安全 数据安全/隐私保护 开发者
        三款.NET 代码混淆工具比较分析:ConfuserEx、Obfuscar 和 Ipa Guard
        三款.NET 代码混淆工具比较分析:ConfuserEx、Obfuscar 和 Ipa Guard
        |
        2月前
        |
        开发框架 监控 .NET
        【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
        x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
        |
        2月前
        Visual Studio 快速分析 .NET Dump 文件
        【11月更文挑战第10天】.NET Dump 文件是在 .NET 应用程序崩溃或出现问题时生成的,记录了应用程序的状态,包括内存对象、线程栈和模块信息。通过分析这些文件,开发人员可以定位和解决内存泄漏、死锁等问题。在 Visual Studio 中,可以通过调试工具、内存分析工具和符号加载等功能来详细分析 Dump 文件。此外,还可以使用第三方工具如 WinDbg 进行更深入的分析。
        |
        6月前
        |
        存储 运维
        使用Visual Studio分析.NET Dump
        使用Visual Studio分析.NET Dump
        |
        4月前
        |
        存储 运维
        .NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
        .NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
        |
        5月前
        |
        开发框架 缓存 .NET
        【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
        【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
        |
        8月前
        |
        存储 测试技术 计算机视觉
        高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
        高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
        |
        jenkins 关系型数据库 MySQL
        一文搞定SonarQube接入C#(.NET)代码质量分析
        一文搞定SonarQube接入C#(.NET)代码质量分析
        1632 0
        一文搞定SonarQube接入C#(.NET)代码质量分析
        |
        数据可视化 大数据 物联网
        国内首款基于.NET Core平台的大数据可视化分析工具平台
        NBI一站式自服务大数据可视化分析平台是一款基于.NET Core开发的自助式可视化分析大屏展示平台,可以通过平台零代码或低代码方式构建各类数据展示分析; NBI一站式自服务大数据可视化分析平台提供了多种灵活的部署方式,支持安装包模式安装、手动安装、docker镜像安装 NBI一站式自服务大数据可视化分析平台跨平台性:支持部署在Windows、Linux、MacOS等操作系统上运行
        国内首款基于.NET Core平台的大数据可视化分析工具平台
        |
        存储 开发框架 JSON
        一套标准的ASP.NET Core容器化应用日志收集分析方案
        本文记录一套标准的、无侵入的的容器化应用日志收集方案:
        一套标准的ASP.NET Core容器化应用日志收集分析方案