【发布时间】:2015-06-25 06:21:19
【问题描述】:
我有一个要求,即不应将值作为域和会话上的 cookie 缓存在服务器或浏览器中。
所以我选择永久重定向到该值
小服务程序:
@Override
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String key = request.getParameter("key");
String val = request.getContentType();
if (val != null && val.length() == 0) {
val = null;
}
String repeatText = request.getParameter("repeatText");
if (val != null && repeatText == null) {
response.setStatus(301); // moved permanent
response.addHeader("Location", "?repeatText=" + val);
System.out.println("Write");
} else {
if (repeatText != null) {
response.setContentLength(repeatText.length());
response.addHeader("pragma", "no-cache");
response.addIntHeader("expires", BROWSER_CACHE_DAYS);
response.getWriter().write(repeatText);
System.out.println("Read and cache!");
} else {
response.sendError(304); // use from cache!
System.out.println("Send use from cache.");
}
}
}
脚本:
<input class="username" />
<button>Login</button>
<script>
jQuery.ajax('theservlet?key=username').done(function(v){jQuery('.username').val(v);});
jQuery('button').click(function(){
jQuery.ajax('theservlet?key=username',{contentType:jQuery('.username').val()})
});
</script>
控制台输出:
Send use from cache.
--- i enter username and press the button ---
Write
Read and cache!
--- now i make a reload ---
Send use from cache.
从浏览器缓存重新加载后不返回我插入的用户名。
为什么浏览器不缓存?
【问题讨论】:
-
重载前后地址栏显示什么?
-
http://localhost:8080/ -
BHSM 是 BrowserHistoryStorageMechanism。
-
对了,如果你想让浏览器缓存结果,为什么要调用
response.addHeader("pragma", "no-cache");? -
@CupawnTae 我喜欢阻止任何代理缓存。不是浏览器。编译指示是否也阻止浏览器缓存?
标签: java jquery http servlets http-status-code-301