一尘不染

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

jsp

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

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

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

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

另一种选择是发送一个<script>window.href.location="errorPage"</script>,从而强制客户端重定向,但这很丑陋。另外,您必须</script>关闭<script>部分页面中所有潜在的未关闭标签。

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


阅读 337

收藏
2020-06-08

共1个答案

一尘不染

您无法以分块编码的形式从服务器重定向,因为标头已经发送。执行重定向的唯一方法是<script>从服务器发送标签并执行客户端重定向。出于好奇,您是否正在尝试实现COMET服务器?在这种情况下,与隐藏的iframe技术相比,HTML5WebSockets似乎是更好的方法(如果您要定位的浏览器当然支持它们)。

2020-06-08