首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以缓存一个HTML img吗,它的源指向一个动态生成它的java servlet?

我可以缓存一个HTML img吗,它的源指向一个动态生成它的java servlet?
EN

Stack Overflow用户
提问于 2011-11-14 20:47:54
回答 3查看 843关注 0票数 1

在我的项目中,我们使用了一些img标签

代码语言:javascript
复制
<img src="url to java servlet?parameters">

而servlet会立即响应bytesteam,例如

代码语言:javascript
复制
response.getOutputStream().write(imageBytes);

这一切都很好,但是有没有办法在浏览器中缓存图像,因为它不会像常规的url图像那样自动缓存它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-14 22:18:03

您至少需要在响应上设置ETagLast-ModifiedExpires标头。ETag报头应基于文件名、文件大小和上次修改时间戳的组合来表示文件的唯一标识符。Last-Modified标头应表示文件的最后修改时间戳。Expires标头应该通知客户端允许它在缓存中保留文件多长时间。

如果客户端的缓存已经过期,并且ETagLast-Modified可用,则客户端将发送HEAD请求,以检查文件是否需要续订。如果不是,那么Expires将被再次相应地推迟。

您可以在这里找到一个servlet示例,它可以处理所有这些(以及下载简历和自动GZIP):FileServlet supporting resume and GZIP

但是,如果您的文件已经在磁盘文件系统上可用(而不是在数据库中),那么您应该考虑将作业委托给servlet容器的内置缺省servlet。另请参见Reliable data serving

票数 1
EN

Stack Overflow用户

发布于 2011-11-14 22:05:13

请参阅Caching Tutorial for Web Authors and Webmasters

您希望输出合适的缓存控制标头和/或处理If-Modified- ETag和/或ETag请求。

票数 2
EN

Stack Overflow用户

发布于 2011-11-14 20:51:44

servlet应该为if-modified-since提供逻辑,expired逻辑。请参见getLastModified方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8121812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档