use*_*932 9 http http-status-codes
作为HTTP 1.1服务器,我回复具有200 OK状态代码的GET请求,然后开始将数据发送到客户端.在此发送过程中,发生错误,我无法完成.
由于最终状态代码已经发送,我无法发送新的状态代码.
我应该如何让客户知道发生了错误,我无法继续这个HTTP请求?
我只能想到一个解决方案:关闭套接字,但它并不完美:它打破了keep-alive功能,并且没有给客户端错误的明确解释.
HTTP标准似乎假设服务器在开始回复之前已经确切知道要回复的内容.但情况并非总是如此.示例:我从磁盘返回一个非常大的文件(几GB),在读取文件期间的某个时刻出现IO错误.与大型数据库转储相同的示例.
我无法在内存中构建我的整个响应然后发送它.
HTTP 1.1标准有助于使用分块传输编码:在开始发送回复之前,我甚至不需要知道最终大小.因此,HTTP 1.1不排除这些用法.
我终于找到了一个可能的解决方案: HTTP 1.1 Trailer headers。
在分块编码主体中,HTTP 1.1 允许发送方以标头块的形式在最后一个(空)块之后添加数据。该规范暗示了一些用例,例如动态计算正文的 md5,并在正文之后发送它,以便客户端可以检查其完整性。
我认为它可以用于错误报告,即使我还没有发现任何关于这种用法的信息。
我看到的问题是:
| 归档时间: |
|
| 查看次数: |
2476 次 |
| 最近记录: |