在工作中,我们的网站站点在NetScaler后面,缓存响应。我试图了解这是如何工作的。
因此网站具有身份验证功能,如果您没有fed-auth cookie,则会收到302
响应以重定向到Oauth源。如果用户经过身份验证,则会收到200
响应。
NetScaler设置为缓存200s响应但不是302s
我的问题是,当我发出请求时,服务器正在确定200或302,NetScaler如何知道如何返回缓存响应而无需进入服务器?
对缓存的简单理解将使我得出结论,所有请求都将返回200响应而不检查服务器。
但这不是我们所看到的。在手动测试中,网站正如预期的那样按预期记录人员进出。但是,当应用自动化测试时,用户将获得200缓存的响应。我说这是缓存的回复,因为我们在标题中看到了ETag
和Via: NS-Cache
。
如果有人可以给我一个资源或一个简短的解释,那么我可以更好地了解我将不胜感激。
答案 0 :(得分:1)
NetScaler的缓存行为完全由策略和RFC 2616兼容驱动。当您缓存此类动态内容时,您必须了解其中哪些部分是特定于用户的,这一点非常重要。任何可以规范化的东西,例如,通过删除像cookie这样的用户特定信息,都可以被缓存。对比"集成缓存"。 HTTP标头的重要性。
Via:这是验证NetScaler参与缓存时最有用的标题
If-Modified-Since:这是一个请求方头,客户端用它来询问缓存,如NetScaler,如果自指定日期以来已更改,则提供完整对象。在很大比例的情况下(这里谈论静态对象),这些对象不会发生变化,这将导致更小的HTTP 304响应Not Modified而不是更大的对象。
我们注意看到等式的两面。 Netscaler和Fiddler上的NSTRACE在客户端上运行发出HTTP请求。
要从GUI进行跟踪,请使用“诊断”部分中的“启动新跟踪”选项。数据包大小为零。输出到PCAP,Wireshark安装在工作站上。安装WINSCP或类似下拉PCAP文件。
您可以在设备上使用SSH / Putty或在MGMT IP上使用虚拟设备吗?
以root身份登录。
显示缓存统计信息-detail 输入
在输出中降低,您将能够看到304与非304的命中百分比。当客户端指示他们已经拥有某个对象并且仅检查是否有更新的副本时,HTTP头代码304在响应中发送而不是完整(更大)的响应。
显示统计数据如何随时间变化
show cache stats -detail -ntimes 3 | grep 304
查看所有缓存的对象
显示缓存对象
左侧是定位器ID
深度潜水
显示缓存对象-Locator
http://www.telerik.com/fiddler
查看来自服务器的客户端响应
Netscaler将使用Etag标头和Via进行响应,以告知缓存来自何处。
希望这是指向正确的方向