Hi, I have a Jetty server that was upgraded from 9.4 to 10.0. There is one requirement to do some "header maintenance": Before ethe response is sent to client, I want all headers created by several addHeaders in a bunch of servlets, filters and other handlers to be cleaned up. In my case, this is deduplication and merging of "vary" and "cache-control" headers to assist NGINX in front so it only gets one header and not multiple.
In Jetty 9.4, I had the following code, added as bean to the connector: private static HttpField mergeHttpFields(String name, List<HttpField> fields) { return (fields == null) ? null : new HttpField(name, fields.stream() .map(HttpField::getValues) .flatMap(Stream::of) .distinct() .collect(COMMA_JOINER)); } private static final HttpChannel.Listener HEADER_MERGER = new HttpChannel.Listener() { @Override public void onResponseBegin(Request request) { final HttpFields headers = request.getResponse().getHttpFields(); headers.computeField("Vary", Bootstrap::mergeHttpFields); headers.computeField("Cache-Control", Bootstrap::mergeHttpFields); } }; // This is how its added: connector.addBean(HEADER_MERGER); In 10.0 this no longer compiled, but was easy to fix by using the HttpFields.Mutable interface instead of HttpFields. But actually the headers were no longer merged! Debuggig through the code, I figured out that my header merger was actually called before the response was submitted and after it ran, the HttpFields were correctly merged. But on the wire they did not appear, the original headers were sent. What changed? The Mutable vs. Immutable is the problem: Before the onResponseBegin() handler is called, the HttpChannel has already made a Immutable snapshot of the headers, so all changes to the Mutable ones are lost. My question now: How to "clean up headers" the easy way with Jetty 10? I know there might be ways to implement Interceptors, but this makes it really unreadable and hard to maintain. Does anybody has a better idea how to tell Jetty to modify the headers before sending them? I found no other Listener that could achieve this. Is there something like beforeCommit? Uwe ----- Uwe Schindler uschind...@apache.org ASF Member, Member of PMC and Committer of Apache Lucene and Apache Solr Bremen, Germany https://lucene.apache.org/ https://solr.apache.org/ _______________________________________________ jetty-users mailing list jetty-users@eclipse.org To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/jetty-users