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