How to set content length as long value in http header in java?

后端 未结 4 697
执念已碎
执念已碎 2021-01-01 22:48

I am writing a web server in java that is transferring file upto 2GB fine. When I searched for the reason, I found like java HttpServelet only allows us to set the content l

4条回答
  •  情歌与酒
    2021-01-01 23:09

    Do not set it and use chunked encoding. Also beware of HEAD requests = these requests should return the same content-length as GET, but not sending the actual body. Default implementation of HEAD in javax.servlet.http.HttpServlet is done by calling GET on the same URL and ignoring all the response body written (only counting characters) - see the following fragment:

    protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        NoBodyResponse response = new NoBodyResponse(resp); // mock response (not writing)
        doGet(req, response); // performs a normal GET request
        response.setContentLength(); // this uses INTEGER counter only
    }
    

    The problem is that the content length counter is also integer. So I recommend overloading doHead method also and not setting the content length at all (you might want to leave GET call also to save time generating the giant file).

提交回复
热议问题