如果在向客户端写入流响应时发生错误,http 服务器的正确行为是什么。客户端已经收到状态码 200,所以它认为没问题。服务器是否仍然可以通过通知客户端发生错误的方式终止连接,或者它是否应该在响应正文中返回某些内容?
我正在从数据库中流式传输许多行,因此我不想在发送到客户端之前进行批处理。
golang中的一个例子:
func streamingHandler(s ServerSettings, db *sql.DB) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json-seq")
w.Header().Set("Access-Control-Allow-Origin", "*")
_, err = fmt.Fprintf(w, "\u001E[1,2,3]\n", item)
if err != nil {
http.Error(w, err.Error(), 500)
return
}
_, err = fmt.Fprintf(w, "\u001E[1,2,3]\n", item)
// the error could be from Fprintf or a database error.
// What happens if error occurs here.. the client has already received header and some response
if err != nil {
http.Error(w, err.Error(), 500)
return
}
...
etc
})
}
慕虎7371278
相关分类