javax.servlet.Filter中response和request执行顺序

理解Servlet过滤器一文中有下图:
图片说明
我理解的是,request从客户端发送过来后经过filter处理后传递给web应用;服务器做响应后发出response,response经过filter处理后传递给客户端。

可是当我在web应用中对进行以下处理后

response.reset();
 response.setContentType("text/html;charset=utf-8" );

然后在filter中设置

 httpResponse.setHeader("Access-Control-Allow-Origin", "*");

结果在客户端respones的header中没有"Access-Control-Allow-Origin":"*"这条属性。
如果把response.reset();注释掉就有了,可这个和上面的结论不是矛盾吗?

客户端是啥?过滤器是拦截所有满足拦截条件的请求,然后放行或者其他操作。跟response有啥关系

你给出的filter的执行流程是正确的,你的理解也是正确的,关键是response.reset()操作。
reset方法会清除所有缓冲区的数据包含状态码和响应头,所以导致你后来设置的响应头信息失效了。
API如下:

 reset():
Clears any data that exists in the buffer as well as the status code and headers. If the response has been committed, this method throws an IllegalStateException.