据我所知,大多数语言都支持服务器端重定向(asp.net: Response.Redirect, PHP: header( 'newpage' ) ; )
.您也可以使用JavaScript进行重定向(window.location.href="newLocationURL")
.
你何时会选择一个而不是另一个?
关于ASP.net/IIS7(集成模式下的app池,启用32位apps = false),我注意到即使页面有302标题,整个页面主体也会被发送到客户端.
而且我相信这不是用PHP的情况下,只有头部被发送?在客户端引用Redirect意味着以下步骤:客户端 - >服务器端 - >客户端 - >服务器端 - >客户端.
服务器端重定向意味着:客户端 - >服务器端 - >客户端(仅限标头)* - >服务器端 - >客户端.
W3C标准或服务器端重定向实现是否因Web服务器技术而异?
编辑:我只关心Response.Redirect(在asp.net中)而不是server.transfer,至少对于这个讨论
JavaScript示例实际上不是重定向.没有301/302响应的方法.这只是一个简单的请求,在页面到达后很长一段时间内发生在某个Javascript事件中.如果您在页面加载期间执行此操作,那么它将比实际重定向具有更多开销,并且它也不适用于禁用JS的浏览器.
重定向将从服务器端启动,并具有301/302响应.所有webapp语言/框架默认为302.您通常可以通过添加一个额外的参数或代码行来指示它.301的好处是通过搜索机器人不再索引特定请求的方式.
在ASP.Net中,两种服务器端重定向之间有重要区别。它们是Response.Redirect和Server.Transfer。
如果调用Response.Redirect,则需要两次往返服务器。在第一次调用服务器时,服务器响应指示浏览器请求下一页。请求下一页构成Web服务器的第二次往返。
如果使用Server.Transfer,则只有一次往返。因此,网络流量要少得多。但是,使用Server.Transfer有一个限制,那就是目标页面必须位于同一Web服务器上。也就是说,您不能从网络应用程序将Server.Transfer传输到www.Google.com。但是您可以Response.Redirect到它。
在使用这些方法之前,还需要研究其他细节。但是,我认为在此问题的上下文中值得注意的是,在任何语言中,Response.Redirect都可能导致比实际所需的网络流量大得多的网络流量。