【问题标题】:Detect Set-Cookie expiration检测 Set-Cookie 过期
【发布时间】: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


    【解决方案1】:

    在稍微摆脱了问题本身之后,我找到了一个答案,显示了使用完整标头获取命令的 ACL 的合成器应该是什么样子的。

    底线....文档有点古怪,解决方案如下所示:

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

    【讨论】:

      猜你喜欢
      • 2017-12-02
      • 1970-01-01
      • 2019-09-06
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 2012-06-14
      相关资源
      最近更新 更多