高手帮忙解释下redirect背后的HTTP操作

minioreo 2009-03-23 10:02:00
以前看ASP.NET的时候知道redirect方法是先返回客户浏览器告诉它要重定向到另一个页面,然后客户浏览器就去请求那个页面。前几天看HTTP的时候知道HTTP的基本操作 客户端有GET POST HEAD方法,然后服务器有返回HTTP OK或者400什么的。于是就很费解这个redirect是怎么做的?
烦请高手帮忙解释下,谢谢。
...全文
93 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
minioreo 2009-03-28
  • 打赏
  • 举报
回复
哦 这样啊 知道了 谢谢
注册失败 2009-03-26
  • 打赏
  • 举报
回复
客户端首先请求一个页面:用的POST
POST /user!login.do HTTP/1.1
Accept: */*
Referer: 此处地址被我删除
Accept-Language: en-us
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0
Host: 被我删除
Content-Length: 120
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: 被我删除

这里是post给服务器的数据,已经被我删除

下面是服务器的返回结果:
HTTP/1.1 301 Moved Temporarily
Proxy-Connection: Keep-Alive
Connection: Keep-Alive
Content-Length: 87
Expires: 0
Date: Mon, 23 Mar 2009 05:54:51 GMT
Location: 浏览器收到3开头的返回状态字,就会去请求这里的这个页面,因此浏览器的内容也就被重定向到了这里了
Vary: Accept-Encoding
Pragma: no-cache
Cache-Control: no-cache
Set-Cookie: encry_user=fe3bdf95a8049fc264121a581a4c4ba1; domain=xiaoi.com; path=/; expires=Wed, 16-Mar-2039 05:54:51 GMT; HttpOnly
Vary: Accept-Encoding

上面的两段是我从软件中截出来的,
如果要自己去看这个过程,你可以下载一个 iHttpHeader,不过这东西只支持IE6
或者使用 HttpAnalysys,这个比较复杂点,不过支持更广泛

服务器的返回状态字中,3开头的都是表示要重定向的
301,302,303都有可能,这个貌似是与web server的设置有关的,具体情况目前我还不清楚

具体的RFC文档请参考:http://www.w3.org/Protocols/rfc2616/rfc2616.html
syb1045 2009-03-24
  • 打赏
  • 举报
回复
学习来的...
minioreo 2009-03-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bsetsail 的回复:]
以前看ASP.NET的时候知道redirect方法是先返回客户浏览器告诉它要重定向到另一个页面,然后客户浏览器就去请求那个页面。
你自己都說了啊
response是從服務器寫到客戶端的
response.redirect就是把url寫到客戶端,然后客戶端再根據url請求服務器端進行頁面跳轉

get,post
比如在頁面跳轉的時候url為http://....aspx?id=1&name=a
那么取值id和name的時候就是get,用request["id"]或者request.querystring["id"]取值…
[/Quote]
额 我是这个意思 redirect调用的时候下层的HTTP命令是怎么样的?
我看HTTP的操作里只有客户端GET/POST/HEADER方法,服务器端就返回HTTP200 OK HTTP 400 ERROR之类的代码,那么客户端浏览器是根据什么知道该请求另一个网页呢?
bsetsail 2009-03-24
  • 打赏
  • 举报
回复
以前看ASP.NET的时候知道redirect方法是先返回客户浏览器告诉它要重定向到另一个页面,然后客户浏览器就去请求那个页面。
你自己都說了啊
response是從服務器寫到客戶端的
response.redirect就是把url寫到客戶端,然后客戶端再根據url請求服務器端進行頁面跳轉

get,post
比如在頁面跳轉的時候url為http://....aspx?id=1&name=a
那么取值id和name的時候就是get,用request["id"]或者request.querystring["id"]取值
如果用submit提交的時候url里邊并沒有id=1&name=a這些參數,則用request["id"]或者request.form["id"],當然這個時候的id是前一頁面的控件客戶端ID

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧