如何在Http消息中处理服务器错误?
假设我已经发送了消息的标题,我正在流式传输 消息的正文,当我遇到意外错误时该怎么办。
我还假设这个错误是在生成内容时引起的,而不是连接错误。
(很大程度上)简化代码:
// I can define any transfer encoding or header fields i need to.
send(header); // Sends the header to the Http client.
// Using an iterable instead of stream for code simplicity's sake.
Iterable<String> stream = getBodyStream();
Iterator<String> iterator = stream.iterator();
while (iterator.hasNext()) {
String string;
try {
string = iterator.next();
catch (Throwable error) { // Oops! an error generating the content.
// What do i do here? (In regards to the Http protocol)
}
send(string);
}
有没有办法告诉客户端服务器失败,应该重试还是放弃连接,还是我是sool?
代码大大简化,但我只询问协议而不是确切的代码。
谢谢
答案 0 :(得分:19)
以下其中一项应该这样做:
这取决于您希望客户对数据做什么(保留或丢弃它)。您可能无法在客户端进行更改,因此最后一个选项不起作用。
以下是关于不同关闭方式的一些解释。 TCP option SO_LINGER (zero) - when it's required
答案 1 :(得分:-5)
我认为服务器应该根据RFC 2616返回响应代码以5xx开头。
服务器错误5xx
以数字“5”开头的响应状态代码表示服务器知道它已经出错或无法执行请求的情况。除了在响应HEAD请求时,服务器应该包括一个实体,其中包含错误情况的解释,以及它是临时或永久条件。用户代理应该向用户显示任何包含的实体。这些响应代码适用于任何请求方法。