【发布时间】:2017-04-19 22:36:58
【问题描述】:
我希望能够检测到来自后端的响应何时包含以下内容:
testCookie="ASF@ED124312FASdf23er="; Version=1; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:10 GMT; Path=/; Secure
我要检测的是响应会将名为 testCookie 的 cookie 的到期日期设置为 01 Jan 1970。
挑战在于 haproxy 在使用 fetch 方法获取标头时,will consider commas as the delimiter for separate values. 和建议的替代方案,即使用 fhdr 获取完整的标头确实有效,但无法让您过滤特定的Set-Cookie 标头通过正则表达式过滤器或其他东西,因此您必须依赖Set-Cookie 标头的固定索引来获取....这显然是不可接受的。
所以,我试过了:
带有正则表达式的 ACL
acl is_expiration hdr_reg(Set-Cookie) <enter_regex_here>
这有一个缺点,即过期日期中的逗号将导致 haproxy 将该值解析为 2 个单独的部分,因此您可以匹配为您提供正确 cookie 标识符的第一部分或具有过期日期的第二部分。
带有 var 和单独 acl 的完整标题
http-response set-var(txn.temp_var) res.fhdr(Set-Cookie)
acl is_expiration var(txn.temp_var) -m sub 01\ Jan\ 1970
这会将整个文本存储在 Set-Cookie 标头中的临时值中,然后我可以对其进行子字符串匹配或正则表达式,但我仍然遇到逗号问题,这是错误的方法很容易,因为它将采用找到的第一个 Set-Cookie 标头或在我可以指定的特定索引处找到的标头。
解决方法
我可以通过 Max-Age 匹配,但如果服务器实现发生变化并且 Expires 和 Max-Age 切换位置,我就完蛋了。
acl is_expiration hdr_reg(Set-Cookie) testCookie.*Max-Age=0
所以.....嘻嘻!!!
【问题讨论】:
标签: haproxy