Redirect 原理
mvc .net 中,从服务器端跳转页面有很多方法
有些不会改变浏览器地址栏的地址,这个好理解,mvc本身的机制就是action的名字不一定是view的名字
我们请求的不是文件名,在action中我们可以任意调用其它的action
有些跳转方式,是会改变浏览器地址栏的
webform的开发者常用的跳转方式,直接将js代码返回到客户端,并触发
mvc也可以用,如
return Content("<script language='javascript'>window.open('aaa.aspx');</script>");
这种方法也好理解,但是另一种会改变地址栏的方法:
Redirect
是通过什么方式通知浏览器去重定向地址栏的呢?
这其实是很基础的web开发知识,但是我确实不知道
以RedirectToAction为例,
<form action="TestRedirect" method="post">
测试跳转
<input type="submit" value="提交" />
</form>
[HttpPost]
public ActionResult TestRedirect()
{
return RedirectToAction("Contact", "Home");
}
开始以为,是通过底层的方式注入了js,所以查看post返回的信息
response是空的
既然没有人为代码的干预,那可以肯定是浏览器接受到了指令,自动重定向了地址栏
好歹记得headers在服务器端也会变,查看header
|
发现Request Headers 中,有目标地址。
测试普通post
[HttpPost]
public ActionResult TestRedirect()
{
return Content("test");
}
结果:
|
发现没有Location这个参数
猜测是不是有Location浏览器就会自动跳转
[HttpPost]
public ActionResult TestRedirect()
{
Response.AddHeader("Location", "/Home/Contact");
return Content("test");
}
失败,不会跳转
对比headers,又发现一个差异。Status Code是不一样的
普通的post,Status Code 是 200
redirect post的Status Code: 是 302
测试:
[HttpPost]
public ActionResult TestRedirect()
{
Response.AddHeader("Location", "/Home/Contact");
Response.StatusCode = 302;
return Content("test");
}
成功跳转,另外如果Location不存在,只修改status,也不会跳转
结论:
Redirect 的原理是通过修改status来通知浏览器来重定向 .
当然,搞明白这个,或许没什么用(用这个方法来跳转页面看起来很诡异,因为貌似不管在哪种架构里都有redirect)
不过至少涨了点zishi,StatusCode 是有很多实际意义的,之前一直不知道
http://www.w3school.com.cn/tags/html_ref_httpmessages.asp
Redirect 原理的更多相关文章
- Response.Redirect原理图解
- 重定向(Redirect)相关的几个问题
转载自:http://hi.baidu.com/fboosjgvuvckore/item/405a1cd7be2c36e3795daa8b 此次挂接用户中心,交互大都通过重定向(Redirect)实现 ...
- ASP.NET相关
1.委托:把一个方法当作参数传到另一个方法中 扩展方法:1.静态类 2.静态方法 3.this关键字 using System; using System.Collections.Generic; u ...
- 06 ASP.net
ASP.net 第一天 理解浏览器与服务器概念,与WinForm的区别. C# IIS(Internet Information Service) 互联网信息服务 Java(Tomcat) Php(A ...
- Yii rbac原理和实践
Yii框架中集成分层的 RBAC,代码位于vendor\yiisoft\yii2\rbac中,rbac工作原理分为两部分,建立授权数据和进行权限检查. 如上,一个角色拥有某个权限,如果希望用户拥有这个 ...
- 跟vczh看实例学编译原理——零:序言
在<如何设计一门语言>里面,我讲了一些语言方面的东西,还有痛快的喷了一些XX粉什么的.不过单纯讲这个也是很无聊的,所以我开了这个<跟vczh看实例学编译原理>系列,意在科普一些 ...
- I/O重定向的原理和实现
在Unix系统中,每个进程都有STDIN.STDOUT和STDERR这3种标准I/O,它们是程序最通用的输入输出方式.几乎所有语言都有相应的标准I/O函数,比如,C语言可以通过scanf从终端输入字符 ...
- JAVA常见面试题之Forward和Redirect的区别
用户向服务器发送了一次HTTP请求,该请求可能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求,但是用户是感觉不到请求转发的.根据转发方式的不同,可以区分为直接请求转发 ...
- Forward和Redirect的区别
一:间接请求转发(Redirect) 二:直接请求转发(Forward) 用户向服务器发送了一次HTTP请求,该请求可能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求 ...
随机推荐
- poj2367 拓扑序
题意:有一些人他们关系非常复杂,一个人可能有很多后代,现在要制定一种顺序,按照前辈在后代前排列就行 拓扑序裸题,直接建边拓扑排序一下就行了. #include<stdio.h> #incl ...
- Python爬虫学习笔记——豆瓣登陆(三)
之前是不会想到登陆一个豆瓣会需要写三次博客,修改三次代码的. 本来昨天上午之前的代码用的挺好的,下午时候,我重新注册了一个号,怕豆瓣大号被封,想用小号爬,然后就开始出问题了,发现无法模拟登陆豆瓣了,开 ...
- java的nio之:java的nio的服务器实现模型
[nio服务端序列图]
- jQuery对下拉框Select操作总结
jQuery对下拉框Select操作总结 转自网络,留做备用 jQuery获取Select元素,并选择的Text和Value: 1. $("#select_id").change( ...
- Singleton模式
Singleton模式的特点: 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 定义一个Instance操作,允许客户访问它的唯一实例.Instance是一个类操作(C++中的一个静态成员函数 ...
- C#实现通过模板自动创建Word文档的方法
原文地址:http://www.jb51.net/article/55332.htm 本文实例讲述了C#实现通过模板自动创建Word文档的方法,是非常实用的技巧.分享给大家供大家参考.具体实现方法 ...
- jQuery的图像裁剪插件Jcrop
1.最基本使用方法 html代码部分: <img src="demo_files/flowers.gif" id="demoImage"/> ...
- PHP 5.6.11 访问SQL Server2008R2
PHP天生支持MySQL,但是有时候也想让它访问SQL Server,该怎么办呢? 最近找了点资料,测试成功了PHP访问SQLSvr的几种情况,限于时间,还没有测试更多不同环境,把测试过的记录如下: ...
- web压力测试 - http_load
http_load是基于linux平台的一个性能测工具 非常小巧易用,可以用并行方式运行,来测试web服务器的性能 测试方式 (1)准备测试url vim url.txt 填写要测试的url,可以写多 ...
- final,static
如果输入参数在方法体执行过程中,强制不能被修改,那么参数类型前加final比较安全. final修饰的函数会被编译器优化,优化意味着编译器可能将该方法用内联(inline)方式载入.final修饰变量 ...