首页 > 解决方案 > 删除“过期”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")
        );
    }

}

标签: javamicronaut

解决方案


不确定为什么要从过滤器返回文件

如果只是您确定的方法打扰您生成此标头,则可以覆盖它:

@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
    }
}

推荐阅读