如何在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);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法告诉客户端服务器失败,应该重试还是放弃连接,还是我是sool?
代码大大简化,但我只询问协议而不是确切的代码.
谢谢
jdb*_*jdb 19
以下之一应该这样做:
这取决于您希望客户对数据做什么(保留或丢弃它).您可能无法在客户端进行更改,因此最后一个选项不起作用.
以下是关于不同关闭方式的一些解释.TCP选项SO_LINGER(零) - 何时需要.
zzk*_*zzk -10
我认为服务器应该根据RFC 2616返回以 5xx 开头的响应代码。
服务器错误 5xx
以数字“5”开头的响应状态代码表示服务器意识到它已出错或无法执行请求的情况。除非响应 HEAD 请求,否则服务器应该包含一个实体,其中包含错误情况的解释,以及它是临时还是永久的情况。用户代理应该向用户显示任何包含的实体。这些响应代码适用于任何请求方法。