作为 HTTP 1.1 服务器,我用 200 OK 状态码回复 GET 请求,然后开始向客户端发送数据。在此发送期间,发生错误,我无法完成。
我无法发送新的状态代码,因为最终状态代码已经发送。
我应该如何让客户端知道发生了错误并且我无法继续此 HTTP 请求?
我只能想到一个解决方案:关闭套接字,但这并不完美:它破坏了保持活动功能,并且没有向客户端给出错误的明确解释。
HTTP 标准似乎假设服务器在开始回复之前已经确切地知道要回复什么。但情况并非总是如此。示例:我从磁盘返回一个非常大的文件(几 GB),并且在读取文件期间的某个时间点出现 IO 错误。与大型数据库转储相同的示例。
我无法在内存中构建我的整个响应然后发送它。
HTTP 1.1 标准通过分块传输编码帮助这种用法:在开始发送回复之前,我什至不需要知道最终大小。所以这些用法不排除在 HTTP 1.1 之外。