如果在向客户端写入流响应时发生错误,HTTP 服务器的正确行为是什么?例如,服务器将正文的一部分写入响应输出流,并使用 200 状态代码提交响应。在生成响应正文的另一块时,我们在服务器上遇到错误。是否有一种机制可以向浏览器返回一个指示符,表明由于服务器上的错误而导致内容不完整?
在我的特定用例中,我使用
script
标签请求动态生成的 JavaScript 文件。
如果这是一个 Javascript 文件,那么您可以在其开头定义一个变量,例如
let completed = false;
并在脚本末尾通过
将其更改为 truecompleted = true;
因此,您的浏览器可以通过
检查此文件是否已成功下载if ((typeof completed !== "undefined") && completed) {
//Download completed successfully
} else {
//Download failed
}
我建议保持简单;在生成内容时捕获错误,然后通过关闭流来写入响应。
看下面的例子
// Generate and write part of the response body
outputStream.write("Part 1 of response body".getBytes());
outputStream.flush();
// Simulate an error while generating the response. This is where the content 'breaks'
if (someCondition) {
throw new IOException("Error generating response");
}
// Generate and write another part of the response body
outputStream.write("Part 2 of response body".getBytes());
outputStream.flush();
// Continue generating and writing the response body...
当
IOException
被捕获时,写下响应
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
PrintWriter writer = response.getWriter();
writer.write("An error occurred while generating the response: " + e.getMessage());
writer.flush();