java - 删除“过期”HTTP 标头(用于 StreamedFiles)
问题描述
在 micronaut 过滤器中,我指定了自己的标头,例如,我使用“max-age”指令设置“Cache-Control”标头。因此,我想删除“Expires”标头,因为通过使用“Cache-Control”,“Expires”标头会被忽略1。
从过滤器返回 StreamedFile 时,“Expires”和“Date”标头由 FileTypeHandler 2设置,我不知道如何更改它。
有没有办法改变这种情况?
例子:
@Filter("/**")
public class MyFilter implements HttpServerFilter {
@Inject
ImageService imageService;
@Override
public Publisher<MutableHttpResponse<?>> doFilter(HttpRequest<?> request, ServerFilterChain chain) {
File image = imageService.getImage(request);
return Publishers.just(
HttpResponse.ok(new StreamedFile(new FileInputStream(image), MediaType.IMAGE_JPEG_TYPE))
.header("Cache-Control", "max-age=31449600")
.header("Access-Control-Allow-Methods", "GET")
.header("Referrer-Policy", "same-origin")
);
}
}
解决方案
不确定为什么要从过滤器返回文件
如果只是您确定的方法打扰您生成此标头,则可以覆盖它:
@Singleton
@Replaces(FileTypeHandler.class)
public class CustomFileTypeHandler extends FileTypeHandler {
public CustomFileTypeHandler(FileTypeHandlerConfiguration configuration) {
super(configuration);
}
@Override
protected void setDateAndCacheHeaders(MutableHttpResponse response, long lastModified) {
//do nothing
}
}
推荐阅读
- java - firebase ValueEventListener/onDataChange 只是将最后一个子节点从数据库中检索到 firebase recyclerview 并忽略其余的
- xml - 如何从销售 id 中过滤记录(创建 uid),仅针对基于销售的特定商家
- php - Laravel ORM 多对多关系就像一对多
- kubernetes - GitLab集成响应401中的helm安装
- java - 如何使用 Selenium 和 Java 从 Bootstrap Glyphicon 日期选择器中选择日期
- javascript - webworkers 中的 tensorflow.js
- c# - 是否有可能 Nlog 不写相同的消息
- angular - Angular:ng build --prod 上的“对象”类型上不存在属性“数据”
- html5-fullscreen - 在页面加载时进入全屏,无需人工干预
- python - 贷款支付建模 - 计算内部收益率