HTTP头信息学习
本贴用于记录HTTP头信息。
Last-Modified和If-Modified-Since
它们都是用来记录页面最后修改时间的头信息,只是:Last-Modified : 是服务器发送给客户端的头信息,而If-Modified-Since是从客户端发送给服务器的。在上一次服务器端发送回来的响应中,包含请求页面最后一次修改(Last Modified)的时间戳。浏览器缓存此页面,当相同的GET请求又再一次发起时,浏览器会把Last-Modified时间戳包含在If-Modified-Since字段中发送给服务器,等待服务器验证缓存在客户端的页面是否是最新的,如果客户端页面不是最新的,就发回新的页面。如果页面是最新的,就返回304状态码告诉客户端其缓存的页面是最新的,之后客户端会加载缓存中的页面,这样在网络发送的数据就大大减少,减轻了服务器端的负担。
Tomcat在实现HttpServlet的services方法,就体现了上述过程。
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
if (method.equals(METHOD_GET)) {
long lastModified = getLastModified(req); //获取页面最后修改时间,用毫秒表示
if (lastModified == -1) {
// servlet doesn't support if-modified-since, no reason
// to go through further expensive logic
doGet(req, resp);
} else {
//其中HEADER_IFMODSINCE = "If-Modified-Since"
long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
if (ifModifiedSince < (lastModified / 1000 * 1000)) {
// If the servlet mod time is later, call doGet()
// Round down to the nearest second for a proper compare
// A ifModifiedSince of -1 will always be less
maybeSetLastModified(resp, lastModified);
doGet(req, resp);
} else {
//返回304状态码
resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步