Redirect 原理
2013-12-03 15:31
399 查看
mvc.net中,从服务器端跳转页面有很多方法有些不会改变浏览器地址栏的地址,这个好理解,mvc本身的机制就是action的名字不一定是view的名字我们请求的不是文件名,在action中我们可以任意调用其它的action有些跳转方式,是会改变浏览器地址栏的webform的开发者常用的跳转方式,直接将js代码返回到客户端,并触发mvc也可以用,如
发现RequestHeaders中,有目标地址。测试普通post
发现没有Location这个参数猜测是不是有Location浏览器就会自动跳转http://www.w3school.com.cn/tags/html_ref_httpmessages.asp
returnContent("<scriptlanguage='javascript'>window.open('aaa.aspx');</script>");这种方法也好理解,但是另一种会改变地址栏的方法:Redirect是通过什么方式通知浏览器去重定向地址栏的呢?这其实是很基础的web开发知识,但是我确实不知道以RedirectToAction为例,
<formaction="TestRedirect"method="post"> 测试跳转 <inputtype="submit"value="提交"/> </form>
[HttpPost] publicActionResultTestRedirect() { returnRedirectToAction("Contact","Home"); }开始以为,是通过底层的方式注入了js,所以查看post返回的信息response是空的既然没有人为代码的干预,那可以肯定是浏览器接受到了指令,自动重定向了地址栏好歹记得headers在服务器端也会变,查看header
RequestURL: RequestMethod: POSTStatusCode: 302FoundRequestHeadersAccept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Encoding:gzip,deflate,sdchAccept-Language:zh-CN,zh;q=0.8Cache-Control:max-age=0Connection:keep-aliveContent-Length:0Content-Type:application/x-www-form-urlencodedCookie:account=lizb;Comm=100076;lastpostedforum=3;visitedforums=3,2Host:localhost:4732Origin:http://localhost:4732Referer:http://localhost:4732/Home/AboutUser-Agent:Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/31.0.1650.57Safari/537.36ResponseHeadersCache-Control:privateContent-Length:130Content-Type:text/html;charset=utf-8Date:Tue,03Dec201306:54:06GMTLocation:/Home/ContactServer:Microsoft-IIS/8.0X-AspNet-Version:4.0.30319X-AspNetMvc-Version:4.0X-Powered-By:ASP.NETX-SourceFiles:=?UTF-8?B?YzpcdXNlcnNcYWRtaW5pc3RyYXRvclxkb2N1bWVudHNcdmlzdWFsIHN0dWRpbyAyMDEyXFByb2plY3RzXE12YzRMZWFyblxNdmM0TGVhcm5cSG9tZVxUZXN0UmVkaXJlY3Q=?= |
[HttpPost] publicActionResultTestRedirect() { returnContent("test"); }结果:
RequestURL: RequestMethod: POSTStatusCode: 200OKRequestHeadersviewsourceAccept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Encoding:gzip,deflate,sdchAccept-Language:zh-CN,zh;q=0.8Cache-Control:max-age=0Connection:keep-aliveContent-Length:0Content-Type:application/x-www-form-urlencodedCookie:account=lizb;Comm=100076;lastpostedforum=3;visitedforums=3,2Host:localhost:4732Origin:http://localhost:4732Referer:http://localhost:4732/Home/AboutUser-Agent:Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/31.0.1650.57Safari/537.36ResponseHeadersviewsourceCache-Control:privateContent-Encoding:gzipContent-Length:122Content-Type:text/html;charset=utf-8Date:Tue,03Dec201307:39:04GMTServer:Microsoft-IIS/8.0Vary:Accept-EncodingX-AspNet-Version:4.0.30319X-AspNetMvc-Version:4.0X-Powered-By:ASP.NETX-SourceFiles:=?UTF-8?B?YzpcdXNlcnNcYWRtaW5pc3RyYXRvclxkb2N1bWVudHNcdmlzdWFsIHN0dWRpbyAyMDEyXFByb2plY3RzXE12YzRMZWFyblxNdmM0TGVhcm5cSG9tZVxUZXN0UmVkaXJlY3Q=?= |
[HttpPost] publicActionResultTestRedirect() { Response.AddHeader("Location","/Home/Contact"); returnContent("test"); }失败,不会跳转对比headers,又发现一个差异。StatusCode是不一样的普通的post,StatusCode是200redirectpost的StatusCode:是302测试:
[HttpPost] publicActionResultTestRedirect() { Response.AddHeader("Location","/Home/Contact"); Response.StatusCode=302; returnContent("test"); }成功跳转,另外如果Location不存在,只修改status,也不会跳转结论:Redirect的原理是通过修改status来通知浏览器来重定向.当然,搞明白这个,或许没什么用(用这个方法来跳转页面看起来很诡异,因为貌似不管在哪种架构里都有redirect)不过至少涨了点zishi,StatusCode是有很多实际意义的,之前一直不知道
相关文章推荐
- pajek 指标计算
- MySQL表分区的使用
- 最长上升子序列(Longest Increasing Subsequence)
- magento cron 配置
- 用Nmap工具查找Downadup/Conficker的蠕虫病毒源
- 一周入门FPGA
- 解决spring.handlers spring.schemas spring.tooling 被覆盖问题,而出现Spring 3.0: Unable to locate Spring Namespa
- c3p0配置解析
- ubuntu下如何安装vmware tool?
- 解决VS2010中CString 转char*的问题
- 每日英语:How to Solve India's Huge Food Wastage
- hadoop2.2编译
- linux 串口控制read()的说明
- 指针和const限定符
- 张小龙《微信背后的产品观》
- Channel is unrecoverably broken and will be disposed!
- Web应用程序完全测试指南
- eclipse下的几个模拟vim的插件
- 通过jstl判断是否给value 赋值
- 2013=12=3 数据库实验七 数据控制实验(完整性部分)