据我所知,我们可以使用两种方法来重定向http响应。
从功能和最终用户的角度来看,这两种方法是否可以互换?
答案 0 :(得分:5)
window.location
需要javascript和浏览器在页面更改之前首先下载并呈现原始页面的内容(包括css / scripts)。
Response.Redirect
使用Location标头发出302状态代码。这会导致浏览器立即请求下一页而不先下载/呈现原始页面。
根据您的other question,值得注意的是window.location
具有在位置更改之前能够执行其他javascript 的好处。例如,同时更改另一帧的位置和当前帧。
答案 1 :(得分:4)
我不熟悉HttpContext.Current.Response.Redirect
,但我猜它会发出HTTP 301响应或类似内容。
HTTP响应代码始终是首选,因为它们内置于HTTP。每个人都理解他们,他们总是工作。搜索引擎和其他自动化应用也会尊重它们。
另一方面,Javascript方法并不总是有效且非标准。
此外,使用HTTP代码,传输的数据保持最小,而Javascript方法总是需要加载整页。
编辑:说明:
为了使HTTP重定向工作,需要传输所有这些,标准HTTP标头:
HTTP/1.1 301 Moved Permanently
Location: http://somenewlocation.com/
对于Javascript,它更像是这样:
HTTP/1.1 200 OK
Date: Wed, 22 Jul 2009 07:56:14 GMT
Server: Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Transfer-Encoding: chunked
Content-Type: text/html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script>window.location = "somewhere.com"</script>
</head>
<body>
</body>
</html>
需要传输完整的HTML文档和,这将花费更长的时间,除了精通Javascript的浏览器之外,不会被任何理解。