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

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

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

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

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

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重定向

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

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

因为跳转后的首页部分资源依赖于302响应时写入的认证Cookie for website1。

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

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

部分常见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响应码的标准规范。

+ https://stackoverflow.com/questions/39693050/alternative-to-server-transfer-in-asp-net-core

+ https://developer.mozilla.org/en-US/docs/Web/HTTP/Redirections

+ https://apereo.github.io/cas/4.2.x/protocol/CAS-Protocol.html

推荐阅读

● 临近年关,修复ASP.NET Core因浏览器内核版本引发的单点登录故障

● MongoDB副本集自动故障转移原理(含客户端)

● HTTP Strict Transport Security (HSTS) in ASP.NET Core

● 2020年了,再不会Https就老了

● 全网最深刻的ASP.NET Core跨平台技术内幕

转载是一种动力,分享是一种美德    ~~..~~

如果你觉得文章还不赖,您的鼓励是原创干货作者的最大动力,让我们一起激浊扬清。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔记本电脑销量排名_网友总结京东笔记本销量,联想高居第一,华为表现很出色...

笔记本电脑,还是要看大品牌。网友总结近30天京东笔记本销量,结局让人出乎意料。网友直呼,原来华为笔记本这么强。智能手机的出现,对传统的PC行业造成了一定的影响,但它始终还是无法替代PC的功能。在这个行业中&#xf…

数据结构---二叉排序树

数据结构—二叉排序树 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> typedef struct bstTree {int data;struct bstTree* lchild, *rchild; }bstTree; void createBSTTree(bstTree* & T,int data) {//创建二叉…

研发协同平台持续集成2.0架构演进

在上篇《研发协同平台持续集成实践》一文中我们分享了为什么要做持续集成&#xff0c;技术选型&#xff0c;工作原理以及实践落地。今天我们从架构上来分享一下架构层面的设计和演进。持续集成1.0在最开始设计的过程中&#xff0c;本着一切从需求出发&#xff0c;一切以实现业务…

口袋操作系统_全自动阀口袋包装机的发展

随着全球产业技术的不断发展&#xff0c;包装机行业也出现了产业结构调整的动向&#xff0c;因为全新的全自动阀口袋包装机和全新的包装产品技术问世&#xff0c;那些制作粗糙&#xff0c;能源消耗大&#xff0c;技术相对比较落后的阀口袋包装机也将会被市场一步步淘汰掉&#…

数据结构---二叉搜索树

数据结构—二叉搜索树 原理&#xff1a;参考趣学数据结构 代码&#xff1a; 队列代码&#xff1a; #pragma once #define N 100 #define elemType bstTree* #include<stdlib.h> typedef struct bstTree {int data;struct bstTree* lchild, *rchild; }bstTree; typede…

《ASP.NET Core 微服务实战》-- 读书笔记(第10章)

第 10 章 应用和微服务安全云应用意味着应用运行所在的基础设施无法掌控&#xff0c;因此安全不能再等到事后再考虑&#xff0c;也不能只是检查清单上毫无意义的复选框由于安全与云原生应用密切相关&#xff0c;本章将讨论安全话题&#xff0c;并用示例演示几种保障 ASP.NET Co…

里加一列为1_9月1号新宠物食品法规实施啦,辣鸡宠物食品遭殃,你也可能违法...

大家好啊&#xff0c;今天是2019年9月1号&#xff0c;对于宠物行业其实是一个非常特别的日子今天宠物饲料管理办法正式实施加上2019年1月1号实施的宠物饲料卫生规定以及2015年3月8号实施的全价宠物食品 犬粮&#xff0c;猫粮标准中国的所有的猫狗宠物食品在今天有法可依&#x…

[蓝桥杯2016初赛]凑算式-dfs,next_permutation

代码如下&#xff1a; #include <iostream> using namespace std; const int N 15; bool st[N]; double a[N];int cnt; void dfs(int u) {if (u 10) {if (a[1] a[2] / a[3] (a[4] * 100 a[5] * 10 a[6]) / (a[7] * 100 a[8] * 10 a[9]) 10) {cnt;}}for (int i …

word List 12

word List 12 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

软硬件协同编程 - C#玩转CPU高速缓存(附示例)

写在前面好久没有写博客了&#xff0c;一直在不断地探索响应式DDD&#xff0c;又get到了很多新知识&#xff0c;解惑了很多老问题&#xff0c;最近读了Martin Fowler大师一篇非常精彩的博客The LMAX Architecture&#xff0c;里面有一个术语Mechanical Sympathy&#xff0c;姑且…

python操作excel_使用Python操作Excel时必学的3个库

Python对Excel的操作我主要用xlwt、xlrd、xlutils这三个库。1、xlwt主要用来创建并写入数据到Excel。已经存在的表不可以写入。以下使用Python写九九乘法表到Excel运行之后&#xff0c;代码文件所在的文件夹会多出一个”九九乘法表“的Excel&#xff0c;内容如下图&#xff1a;…

线性代数---线性方程组

线性代数—线性方程组 常见题型的解题技巧 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

gRPC in ASP.NET Core 3.x -- Protocol Buffer, Go语言的例子(下)

前两篇文章半年前写的&#xff1a;gRPC in ASP.NET Core 3.0 -- Protocol Buffer&#xff08;1&#xff09;&#xff0c;gRPC in ASP.NET Core 3.0 -- Protocol Buffer&#xff08;2&#xff09;这是上一篇&#xff1a;gRPC in ASP.NET Core 3.x -- Protocol Buffer, Go语言的例…

得到选择框句柄 怎么操作_知道借名买房有风险,只能选择借名买房该怎么操作?...

文/楼市大家谈(quanadcom)正常情况下&#xff0c;购房者买房之时最看重房子的产权&#xff0c;因此无论是签订购房合同还是办理房产证时&#xff0c;最为在意的都是以谁的名义买房&#xff0c;房子究竟记在谁的名下&#xff0c;但是在有些情况下&#xff0c;一些人迫于无奈&…

数据结构---平衡二叉树

数据结构—平衡二叉树 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> typedef struct avlTree {int data;struct avlTree *lchild, *rchild;int height; }avlTree;int height(avlTree* AVLTree);//声明avl树的深度 …

python list转换成array_一文掌握Python【不定期更新】

目录一、Numpy1 基本操作2 随机数3 打乱训练数据4 得到元素的最值5 拼接数组6 得到函数的信息7 得到累乘即各项相乘的结果8 判断一个数是否在数组中9 数组的变换10 排序11 元素的筛选12.保存文件/打开文件13.限制范围二、PIL1.安装2.PIL与Numpy的互相转化3.获取Image信息4.打开…

开源netcore前后端分离,前端服务端渲染方案

SPA单页面应用容器 开源地址&#xff1a; https://github.com/yuzd/Spa功能介绍前端应用开发完后打包后自助上传部署发布配合服务端脚本(javascript)实现服务端业务逻辑编写渲染SSR功能可以快速回滚到上一个版本可以设置环境变量供SSR功能使用服务端脚本提供执行日志 redis db三…

[蓝桥杯2016初赛]方格填数-next_permutation

代码如下&#xff1a; #include <iostream> #include <algorithm> using namespace std;int main() {int a[10] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};int cnt 0;do {if ((abs(a[0] - a[1]) ! 1) && (abs(a[1] - a[2]) ! 1) && (abs(a[3] - a[4]) ! …

word List 13

word List 13 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

ASP.NetCore+VUE 实现学生成绩管理系统(一)

周三陪伴是最长情的告白还有两天情人节&#xff1a;「无论是在家里&#xff0c;还是在工作&#xff0c;或者是在自我防护中&#xff0c;多给家人爱人发句平安&#xff0c;是最有心意、最重要的一件事。」♥感谢老李????近来一段时间一直没有学习新的东西&#xff0c;闲暇的…