曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 2890|回复: 0
打印 上一主题 下一主题

response.redirect 方法和 response.buffer 属性的关系

[复制链接]

716

主题

734

帖子

2946

积分

超级版主

Rank: 9Rank: 9Rank: 9

积分
2946
跳转到指定楼层
楼主
发表于 2013-4-5 23:51:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
response.redirect 方法的作用是跳转网页,它对 response.buffer属性有依赖关系,也就是说如果要在网页中使用 redirect 方法的话,就必须将 buffer 属性设置为 true 。

如果将 buffer 属性设置为 false 会发生什么情况?比如运行下面的代码:
<[email=%@LANGUAGE=]%@LANGUAGE="VBSCRIPT[/email]" CODEPAGE="65001" %>
<% response.buffer = true %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>

<%

for i = 1 to 10
response.Write(i & " ")
if i = 5 then
  response.redirect("http://www.baidu.com")
end if
next
%>
</body>
</html>
此时会看到错误提示:
1 2 3 4 5
Response 对象 错误 'ASP 0156 : 80004005' HTTP 头错误
/asp/buf.asp,行 16已将 HTTP 头输出到客户端浏览器。任何对 HTTP 头的修改都必须在输出页内容之前进行。
在上面的代码中,我们使用了页面缓冲技术,也就是说输出的页面会先输出到缓冲区然后再输出来。

那么看代码里,在 i 值为 5 时,就用 redirec 方法将页面重定向到另外一个页面,此时服务器在 http header 里告诉客户端浏览器这一改变,主要是增加一个 Location : http://www.baidu.com ,由下图也能看到:
这里,由于缓冲的缘故,页面还没有输出来,因此重定向是可以的。但是如果将 buffer 值改为 false,那么页面在 i 为 500 时,仍然在输出,有悖于“任何对 HTTP 头的修改都必须在输出页内容之前进行”,因此就会出错。

上面的演示是为了使问题看起来简单。实际上,如果 buffer 设置为 false ,那么 redirect 语句放在 <html> 里的任一个地方都会提示错误,如果将其放在 <html> 之外,比如头部,那重定向就是有效的---但这么做看上去真的显得多余且没什么必要。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-17 23:33 , Processed in 0.064285 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表