在早期的.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跨平台技术内幕

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

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

.net core 发起web请求_温故知新 .Net重定向深度分析相关推荐

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

    在早期的.NET Framework程序员心里,重定向Redirect其实分为两种: Response.Redirect:Response对象的Redirect方法提供了一种实现客户端重定向的方法 S ...

  2. 发起http请求_关于HTTP请求发起和响应你了解多少

    在一个web程序开发中,一般都有前端和后端之分,前端负责向后端请求数据和展示页面,后端负责接收请求和做出响应发回给前端,他们之间的协作桥梁是API,而API其实就是一个URL,作为HTTP连接的一种具 ...

  3. bat怎么发起网络请求_因为一个跨域请求,我差点丢了饭碗

    浏览器基本原理 我叫小风,是Windows帝国一个普通的上班族.今天,我入职了一家浏览器公司,公司的主营业务是为人类提供Internet上网服务,我的岗位是负责执行JavaScript代码. 上午的晨 ...

  4. AndroidStudio_Android使用OkHttp发起Http请求_以及使用时需要注意的点---Android原生开发工作笔记220

    这个okHttp的使用,其实网络上有很多的案例的,但是,如果以前没用过,copy别人的直接用的话,可以发现要么 导包导不进来,要么,人家给的代码也不完整,这里自己整理一下. 1.引入OkHttp的ja ...

  5. php发起options请求_如何避免options请求?

    我用vue-cli做一个后台,要跨域访问微信服务器,获取统计数据 我用axios发送post请求,然后浏览器先发了一个options请求 然后报错: 然后,我看阮一峰的 跨域资源共享 CORS 详解, ...

  6. php发起options请求_如何使用PHP发送OPTIONS请求 - php

    有谁知道如何使用PHP发送" OPTIONS"请求. 我找不到做到这一点的curl setopt. 我正在使用PHP 5.6.7 我已经弄清楚了GET,POST,DELETE和PU ...

  7. 典型相关分析_微生物多样研究—微生物深度分析概述

    一.微生物深度分析方法核心思想 复杂微生物群落解构的核心思想: 不预设任何假定,客观地观测整个微生物组所发生的一系列结构性变化特征,最终识别出与疾病或所关注的表型相关的关键微生物物种.基因和代谢产物. ...

  8. 核心微生物分析_微生物多样研究—微生物深度分析概述

    一.微生物深度分析方法核心思想 复杂微生物群落解构的核心思想: 不预设任何假定,客观地观测整个微生物组所发生的一系列结构性变化特征,最终识别出与疾病或所关注的表型相关的关键微生物物种.基因和代谢产物. ...

  9. Web请求响应编码问题详解

    乱码问题一直是困扰开发人员的比较头疼的问题,而发生在 web 请求响应中的乱码问题由于牵扯到比较多的协议框架和技术实现,又显得更加棘手.web 请求中的乱码一般容易出现在两个地方:一是所请求的资源名称 ...

最新文章

  1. Java Stub 研究学习(2)
  2. [Pyhon疫情大数据分析] 一.腾讯实时数据爬取、Matplotlib和Seaborn可视化分析全国各地区、某省各城市、新增趋势
  3. org.apache.maven.archiver.MavenArchiver.getManifest错误
  4. 感性理解Berlekamp-Massey算法
  5. 微博营销不可不知的微博六种人
  6. python中sorted()函数的用法_Python中的Sorted()函数
  7. mysql 分页_mysql大表分页查询翻页优化方案
  8. 圈子圈套 pdf_名字叫什么? 如何圈套好域名
  9. moveit缺少libfcl.so.0.6文件
  10. IT开发工程师的五个等级,你现在几级?
  11. java库net2.0下载_visual j 2.0 下载-Visual J# 2.0(vjredist.exe)下载微软官方版-西西软件下载...
  12. cocos creator屏幕适配fitHeight / fitWidth,手机端竖屏,pc端浏览器适配,pc分辨率全屏适配,血条跟随的适配
  13. vs2017python配置opencv_[opencv +VS2017] opencv、vs2017安装配置,环境搭建
  14. 关于嵌入式面试的一些题
  15. php发布编辑删除功能,php实现添加修改删除
  16. python入门爬取表情包
  17. php联图生成二维码浏览器扫可以到页面,但是QQ或微信扫直接显示链接
  18. SOA构建电子政务平台 可用多种通信手段访问
  19. 敏捷开发项目人力工时评估法则
  20. 怎么走着走着就变“烟囱”了呢?| 建设数据中台系列(二)

热门文章

  1. 编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码
  2. 那些 别人家的孩子 ,后来都怎么样了 ?
  3. SQL | 数据分析面试必备SQL语句+语法
  4. 3d饼图 vue_在Vue中如何使用highCharts绘制3d饼图
  5. kvm虚拟机设置万兆网卡_SR-IOV 10Gb 万兆网卡支持
  6. ubuntu安装javahadoop
  7. 迭代器 生成器 装饰器 匿名函数
  8. NRF24L01模块配置
  9. Java并发程序设计(八)设计模式与并发之单例模式
  10. C++ map嵌套使用 链接