我必须发送 301 响应代码。下面是我正在使用的代码:
resp.setContentType("text/html");
PrintWriter out = resp.getWriter();
out.println(origReqBody);
resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
resp.setHeader("Location", homeSiteRedirUrl);
这里我观察到,如果“origReqBody”为空,那么它会发送301,如果“origReqBody”有一些字符串,那么代码会发送302。如果是302,我可以看到位置 header 在响应中可见4次。
需要了解这种行为。我需要在301中发送正文,可以吗?
编辑: 在 println 上面设置 setHeader 和 setStatus 之后...
消息 7 和 11:如果“origReqBody”为空 消息 27、31:如果“origReqBody”不为空
同样的行为...我期待的是 301 而不是 302
最佳答案
如果有内容,
PrintWriter
实际上会写入输出流,这需要它继续序列化 header 和状态代码,因为它们在响应中排在第一位。因此它只是忽略对 setStatus
和 setHeader
的后续调用。只需将这些调用移至 println
上方,我敢打赌它会按您的预期工作。
关于java - 301 http 响应中的正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16830397/