我希望能够检测到来自后端的响应何时包含此内容:
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 is_expiration hdr_reg(Set-Cookie) <enter_regex_here>
这有一个缺点,即到期日期中的逗号将导致haproxy在2个单独的部分中解析该值,因此您可以匹配第一部分,它给出正确的cookie标识符或第二部分具有到期日期。
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 !!!
答案 0 :(得分:0)
在我的问题本身出了问题之后,我找到了一个答案,显示了使用完整的标头提取命令,ACL的SYNhax应该是什么样子。
底线....文档有点古怪,解决方案看起来像这样:
acl is_expiration res.fhdr(Set-Cookie) -m reg testCookie.*Expires=Thu,\ 01\ Jan\ 1970