【发布时间】:2017-06-03 05:44:49
【问题描述】:
我正在尝试通过 Gzip 压缩来自后端的所有响应来减少网络流量,但是我遇到了一个问题,即如果登录/注销调用是以相同的方式完成的,而我没有在浏览器中设置 cookie确定为什么。
这是Java的后端代码。
Cookie cookie = new Cookie("cookie_name", cookieToken);
cookie.setPath("/");
cookie.setMaxAge(Integer.MAX_VALUE);
response.addCookie(cookie);
response.setContentType("application/json; charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
response.setHeader("Content-Encoding", "gzip");
String json=serviceOutput.toString();
byte[] gzip = Utils.gzip(json.getBytes("UTF-8"));
response.setContentLength(gzip.length);
response.getOutputStream().write(gzip);
任何关于为什么这不起作用的指针?我很确定我以前做过同样的事情,没有任何问题。
--
添加 gzip 方法以防万一
public static byte[] gzip(byte[] content) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
GZIPOutputStream g = new GZIPOutputStream(baos);
if (content != null && content.length > 0) {
g.write(content, 0, content.length);
g.close();
}
return baos.toByteArray();
}
【问题讨论】:
-
您在哪里以及如何准确设置 cookie?
-
我更新了问题以包含设置 cookie 的代码。
-
hmm - 你确实知道大多数 Servlet 容器都支持某些内容类型的自动 gzip 压缩吗?我认为这会减少处理响应头和其他内容的麻烦
-
您使用的是什么容器? cookie 是否包含在 HTTP 响应中?
-
容器是 Jetty 9.4.0.v20161208。使用 gzip 在响应标头中不返回 Cookie。