检测Set-Cookie到期

时间:2017-04-19 14:15:24

标签: haproxy

我希望能够检测到来自后端的响应何时包含此内容:

testCookie="ASF@ED124312FASdf23er="; Version=1; Max-Age=0; Expires=Thu, 01 Jan 1970 00:00:10 GMT; Path=/; Secure

我想要检测的是,响应会将名为01 Jan 1970的Cookie的到期日期设置为testCookie

挑战在于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

所以..... heeeeelp !!!

1 个答案:

答案 0 :(得分:0)

在我的问题本身出了问题之后,我找到了一个答案,显示了使用完整的标头提取命令,ACL的SYNhax应该是什么样子。

底线....文档有点古怪,解决方案看起来像这样:

acl is_expiration res.fhdr(Set-Cookie) -m reg testCookie.*Expires=Thu,\ 01\ Jan\ 1970