在 Java http 中发送部分响应后通知 http 客户端错误的正确方法

问题描述 投票:0回答:2

如果在向客户端写入流响应时发生错误,HTTP 服务器的正确行为是什么?例如,服务器将正文的一部分写入响应输出流,并使用 200 状态代码提交响应。在生成响应正文的另一块时,我们在服务器上遇到错误。是否有一种机制可以向浏览器返回一个指示符,表明由于服务器上的错误而导致内容不完整?

在我的特定用例中,我使用

script
标签请求动态生成的 JavaScript 文件。

java http browser
2个回答
0
投票

如果这是一个 Javascript 文件,那么您可以在其开头定义一个变量,例如

let completed = false;

并在脚本末尾通过

将其更改为 true
completed = true;

因此,您的浏览器可以通过

检查此文件是否已成功下载
if ((typeof completed !== "undefined") && completed) {
    //Download completed successfully
} else {
    //Download failed
}

-1
投票

我建议保持简单;在生成内容时捕获错误,然后通过关闭流来写入响应。

看下面的例子

// 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();
© www.soinside.com 2019 - 2024. All rights reserved.