以分块传输编码发送的响应,并指示在某些数据已发送后发生的错误
Posted
技术标签:
【中文标题】以分块传输编码发送的响应,并指示在某些数据已发送后发生的错误【英文标题】:Response sent in chunked transfer encoding and indicating errors happening after some data has already been sent 【发布时间】:2013-06-16 16:54:01 【问题描述】:我正在以分块传输编码格式向客户端发送大量数据。
我应该如何处理在编写响应期间中途发生的任何错误?
我想知道是否有任何关于此的 HTTP 规范推荐做法,以便客户端知道响应确实不是成功的,但服务器遇到了一些问题。
【问题讨论】:
【参考方案1】:分块响应可以使用trailer header 进行一些完整性检查或后处理状态。这可能比在接受的答案中描述的关闭连接更好,因为您可以有自定义错误消息。但是,只有当您同时控制服务器和客户端时,您才能从中受益。
【讨论】:
【参考方案2】:一旦您开始向客户端发送 HTTP 标头,您就不能再发送任何其他内容了。您必须完成发送您打算发送的响应,即分块数据和相关标头。如果在此过程中发生错误,则无法向客户端报告该错误。您所能做的就是关闭连接。客户端要么没有收到所有的标头,要么在响应结束时没有收到终止的 0 长度块。无论哪种方式都足以让客户端知道服务器在发送过程中遇到错误。
【讨论】:
谢谢雷米。是的......对,我知道标题是首先发送的,一旦我们开始写入流,就无法修改它们。正如您所建议的,我目前关闭了连接,但想知道 HTTP 规范是否有任何其他方式说明如何让客户端知道它。 0 长度的块很有趣,我会检查一下我是否可以在那个区域做点什么。 只有两种方法可以让客户知道出了问题。关闭连接(这是您应该做的),因为除了接收最后一个长度为 0 的块之外的任何事情都是错误的,或者在发送最后一个长度为 0 的块之后将自定义 HTTP 标头放在分块页脚中。大多数客户端可能会忽略这样的标头,但如果您正在编写自己的客户端,那么您可以查找该标头。以上是关于以分块传输编码发送的响应,并指示在某些数据已发送后发生的错误的主要内容,如果未能解决你的问题,请参考以下文章