如何在Servlet中检查标头后删除请求的主体

时间:2010-12-24 23:58:23

标签: java servlets

我想在继续使用正文之前检查请求的标头是否包含某个标头。例如,我想检查多部分/表单数据是否在标题中包含"Authorization"。如果不是,则无需继续上传多部分正文,这对于文件上传来说通常非常大。

servlet允许你这样做吗?我试图随机搜索谷歌,但没有运气。这是我在我的servlet中尝试的代码,但它仍然继续在调用此doPost方法之前接收正文。似乎在调用servlet之前完全接收了流。

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    response.setContentType("text/plain");
    if (request.getHeader("Authorization") == null) {
        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
        out.println("Status: " + HttpServletResponse.SC_UNAUTHORIZED + " - UNAUTHORIZED");
        return;
    }
    // ... the rests
}

2 个答案:

答案 0 :(得分:3)

这是HTTP的限制。如果未完全读取请求,则无法发送响应。

答案 1 :(得分:1)

RFC 2616说:

  

发送消息体的HTTP / 1.1(或更高版本)客户端应该在传输请求时监视网络连接的错误状态。如果客户端看到错误状态,它应该立即停止传输正文。

所以我不同意,这不是HTTP限制,而是servlet。