一旦通过网络发送响应状态,就无法更改。因此,如果您发送了200 OK回复,之后您将无法改变主意。如您所见,这会在响应中间发生错误的情况下出现问题。
据我所知,您唯一能做的就是发送分块响应。请参阅 RFC 2616 的第 3.6.1 节:
分块编码修改消息的主体,以便将其作为一系列块传输,每个块都有自己的大小指示符,后跟一个包含实体头字段的可选尾部。这允许动态生成的内容与接收者验证其已收到完整消息所需的信息一起传输。
此预告片的目的是提供有关实体主体的信息,这些信息在发送实体主体之前无法计算。但是,第 7.1 节允许在此预告片中包含任何标题:
扩展头机制允许在不改变协议的情况下定义额外的实体头字段,但不能假设这些字段可以被接收者识别。无法识别的头域应该被接收者忽略并且必须被透明代理转发。
因此,虽然您可以表示在响应中发生了错误,但必须在两部分之间约定如何发出信号。通常,您不能使用任何您可以假设客户端将理解为发出错误情况的信号的方法。
在带有Content-length标头的消息中过早结束连接是一种选择,但这是明确禁止的:
当在允许消息体的消息中给出 Content-Length 时,其字段值必须与消息体中的八位字节数完全匹配。HTTP/1.1 用户代理必须在收到和检测到无效长度时通知用户。
也就是说,虽然服务器不能发送比他宣传的更短的消息,但客户端必须检查这个错误情况并报告(代理甚至可以缓存这个部分响应)。