0

在工作中,我们的站点位于缓存响应的 NetScaler 后面。我试图了解这是如何工作的。

因此,该网站具有身份验证,如果您没有 fed-auth cookie,您会收到302重定向到 Oauth 源的响应。如果200用户已通过身份验证,则响应。

NetScaler 设置为缓存 200 秒响应,但不缓存 302 秒

我的问题是当我发出请求时,因为服务器正在确定 200 或 302,NetScaler 如何知道在不去服务器的情况下返回缓存响应?

对缓存的简单理解将使我得出这样的结论:所有请求都将返回 200 响应,而无需与服务器进行检查。

但这不是我们所看到的。在手动测试中,该站点按预期工作,按预期登录和注销人员。但是,当应用自动化测试时,用户将获得 200 缓存响应。我说这是缓存响应,因为我们在标题中看到了 anETag和 a 。Via: NS-Cache

如果有人可以向我指出资源或简短的解释,以便我可以更好地了解这将不胜感激。

4

1 回答 1

1

NetScaler 的缓存行为完全由符合 RFC 2616 的策略驱动。当您缓存此类动态内容时,了解其中的哪一部分是用户特定的,这一点非常重要。任何可以被规范化的东西,例如,通过删除用户特定的信息(如 cookie),都可以被缓存。与“集成缓存”相对。HTTP 标头的重要性。

Via:在验证 NetScaler 是否参与缓存时,这是最有用的标头

If-Modified-Since:这是一个请求端标头,客户端用于请求缓存(如 NetScaler)在指定日期后发生更改时提供完整对象。在大部分情况下(这里讨论静态对象),这些对象不会发生变化,这将导致更小的 HTTP 304 响应 Not Modified 而不是更大的对象。

我们需要看到等式的两边。在发出 HTTP 请求的客户端上运行的 Netscaler 和 Fiddler 上的 NSTRACE。

要从 GUI 获取跟踪,请使用诊断部分中的启动新跟踪选项。数据包大小为零。输出到 PCAP,Wireshark 安装在工作站上。安装 WINSCP 或类似下拉 PCAP 文件。

SSH/CLI https://developer-docs.citrix.com/projects/netscaler-command-reference/en/12.0/basic/nstrace/nstrace/

您可以通过 SSH/Putty 连接到 MGMT IP 上的设备或虚拟设备吗?

以 root 身份登录。

显示缓存统计信息 -detail 回车

在输出的下方,您将能够看到命中率是 304 与非 304 的百分比。当客户端指示他们已经拥有某个对象并且仅检查是否存在更新的副本时,HTTP 标头代码 304 在响应中而不是完整(更大)响应中发送。

显示统计数据如何随时间变化

显示缓存统计 -detail -ntimes 3 | grep 304

查看所有缓存的对象

显示缓存对象

左侧是定位器 ID

更深的潜水

显示缓存对象 -Locator

http://www.telerik.com/fiddler

查看来自服务器的客户端响应

Netscaler 将响应 Etag 标头和 Via 以告知缓存来自何处。

希望这是指向正确的方向

于 2017-10-22T19:06:32.797 回答