如果部分响应已发送(分块),如何将浏览器发送到错误页面

这是典型的场景:评估页面,并且有一个缓冲区 – 一旦缓冲区已满,评估页面的一部分就会被发送到浏览器。 这使用HTTP 1.1分块编码。

但是,其中一个块(在已经发送第一个块之后)可能会发生错误。 在这种情况下:

  • 您无法重定向(发送Location标头),因为标头和响应状态已经发送
  • 你不能做服务器端重定向(转发),因为新页面必须在已经发送的部分之后呈现 – 它肯定会看起来很难看。

那么在这种情况下你应该怎么办? 我问了一个问题 ,你是否可以在chunked预告片中发送一个Location标题,但这是低级的http,语言的抽象可能不允许它,即使它是可能的(并且它可能不支持跨浏览器)

另一种选择是发送window.href.location="errorPage" ,从而强制客户端重定向,但这很难看。 另外,您必须使用关闭部分页面中任何可能未关闭的标记。

(我正在标记主要的网络语言/框架,因为这是一个普遍的问题)

您无法使用分块编码从服务器重定向,因为标头已经发送。 执行重定向的唯一方法是从服务器发送标记并执行客户端重定向。 出于好奇,您是否正在尝试实施COMET服务器? 如果是这种情况,那么与隐藏的iframe技术相比,HTML5 WebSockets似乎更好的方式(如果你的目标浏览器当然支持它们)。