17.8. 配置过滤器
过滤器允许修改请求的某些方面,并且可以使用 predicates 来控制过滤器的执行时间。过滤器的一些常见用例包括设置标头或执行 GZIP 压缩。
过滤器在功能上等同于 JBoss EAP 6 中使用的全局值。
可以定义以下类型的过滤器:
- custom-filter
- error-page
- expression-filter
- gzip
- mod-cluster
- request-limit
- response-header
- 重写
以下示例演示了如何使用管理 CLI 配置过滤器。您还可以通过导航到 Configuration
更新现有过滤器
更新现有过滤器:
/subsystem=undertow/configuration=filter/response-header=myHeader:write-attribute(name=header-value,value="JBoss-EAP")
reload
创建新过滤器
要创建新过滤器,请执行以下操作:
/subsystem=undertow/configuration=filter/response-header=new-response-header:add(header-name=new-response-header,header-value="My Value")
删除过滤器
删除过滤器:
/subsystem=undertow/configuration=filter/response-header=new-response-header:remove
reload
有关可用于配置过滤器的属性的完整列表,请参阅 Undertow Subsystem Attributes 部分。
17.8.1. 配置 buffer-request 处理程序
客户端或浏览器的请求由两个部分组成:标题和正文。在典型的情形中,标头和正文发送至 JBoss EAP,两者之间没有任何延迟。但是,如果首先发送标题,在几秒钟后发送正文,则会延迟发送完整的请求。此方案在 JBoss EAP 中创建线程,以显示为 等待
执行完整的请求。
可以使用 buffer-request
处理程序纠正发送标头和请求正文时造成的延迟。buffer-request
处理程序会在将其分配到 worker 线程前尝试使用来自非阻塞 IO 线程的请求。如果没有添加 buffer-request
处理程序,则直接为 worker 线程分配线程。但是,当添加 buffer-request
处理程序时,处理程序会尝试读取它在分配至 worker 线程前可以使用 IO 线程以非阻塞方式缓冲的数据量。
您可以使用以下管理 CLI 命令配置 buffer-request
处理程序:
/subsystem=undertow/configuration=filter/expression-filter=buf:add(expression="buffer-request(buffers=1)") /subsystem=undertow/server=default-server/host=default-host/filter-ref=buf:add
可以处理的缓冲区请求的大小有限制。此限制由缓冲区大小和缓冲区总数的组合决定,如下方的公式所示。
Total_size = num_buffers ¹ buffer_size
在以上因素中:
-
Total_size
是在请求分配给 worker 线程前缓冲的数据大小。 -
num_buffers
是缓冲区的数量。缓冲区数量由处理程序上的buffers
参数设置。 -
buffer_size
是每个缓冲区的大小。缓冲区大小在io
子系统中设置,默认情况下为 16KB。
避免配置非常大的缓冲区请求,否则您可能耗尽内存。