【问题标题】:Zabbix joins the cookies by comma instead of semicolonZabbix 通过逗号而不是分号加入 cookie
【发布时间】:2018-03-14 07:13:59
【问题描述】:

我们在设置 Zabbix Web 场景时遇到了一点问题,我们会向您寻求帮助。我们配置了 Zabbix 的 web 场景来检查添加产品到我们 eshop 上的购物车。

场景作品如下

1) Zabbix 调用 eshop.com/checkout/cart/add/product_id/XXX

2) E-shop 创建一个会话,将产品 XXX 添加到购物车中,并将重定向返回到 eshop.com/checkout/cart 并带有“Set-Cookie: frontend=YYY”以在下一个请求中识别会话

3) Zabbix 使用“Cookie: frontend=YYY”跟随重定向到 eshop.com/checkout/cart

4) Eshop 返回购物车页面的 HTML

5) Zabbix 检查购物车的 HTML 并说“是的,该产品已添加”或“否,该产品未添加”。

仅此而已。不幸的是,如果 Eshop 收到没有“Cookie”的请求,则会将用户重定向到“您已禁用 Cookie。此站点需要 Cookie”页面,这会破坏第 2 步。Uff。我们通过在 Web 场景的设置中添加 cookie “some_cookie_to_avoid_no_cookie_page” 解决了这个问题(见截图)

乍一看效果很好,但有一个问题。在第 3 步中,zabbix 将来自 Eshop 的 cookie 与来自场景设置的 cookie 连接起来,并使用逗号 (,) 代替 (;) 作为分隔符。因此,Zabbix 发送

Cookie: frontend=YYY, some_cookie_to_avoid_no_cookie_page=1

,但 Eshop 期望

Cookie: frontend=YYY; some_cookie_to_avoid_no_cookie_page=1

由于这个分隔符使 Eshop 无法正确识别 cookie“前端”,它不会找到会话并将空购物车的 HTML 返回给 Zabbix。这就是问题。

目前,我们从场景设置中删除了“some_cookie_to_avoid_no_cookie_page”,并禁用了重定向到“您已禁用 Cookie。此站点需要 Cookie”,但这只是我们的权衡。我的问题是:有更好的解决方案吗?例如:

  • 告诉 Zabbix 通过 ';' 加入 cookie
  • 告诉 Zabbix 仅在没有其他 cookie 存在时发送“some_cookie_to_avoid_no_cookie_page”(不幸的是,步骤 1 到 5 是原子的,我们无法让 Zabbix 仅在步骤 2 中发送“some_cookie_to_avoid_no_cookie_page” - 可能将场景分为两个步骤 1-2 和 3-5,但它需要记住 cookie 前端 - 有可能吗?
  • 其他一些解决方案...

非常感谢。 Jirka Ch.

【问题讨论】:

标签: cookies zabbix


【解决方案1】:

根据https://www.ietf.org/rfc/rfc2109.txt,第 9 页,服务器应接受逗号作为 cookie 分隔符:

注意:为了向后兼容,Cookie 标头中的分隔符处处都是分号 (;)。服务器还应该接受逗号 (,) 作为 cookie 值之间的分隔符,以便将来兼容。

尽管 RFC 已有 20 年的历史,但仍有一些服务器仅支持分号。考虑为 Zabbix 创建一个功能请求,以提供 cookie 分隔符选项。

【讨论】:

  • RFC 2109 已被各种其他规范取代,包括 RFC 6265。后者不包含关于向后兼容性的说明,因此发送逗号分隔 cookie 将被视为不正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 2023-04-05
  • 2015-03-15
  • 2017-06-19
相关资源
最近更新 更多