假设我有一个带有名为/getdata接口的 asp.net mvc 3 应用程序,不同的用户通过我的 PC 客户端软件连接到服务器并使用此接口获取私有数据。不同的用户由他们自己加密良好的令牌来识别。
现在问题是 ClientA 告诉我们他得到了另一个用户的数据。从 ClientA 的日志中我们发现他得到了 ClientB 的(但他们彼此不认识,他们不能共享帐户)。我查看了我的 Web 应用程序的代码,但找不到任何混合它们的数据的机会。
所以我想知道这会不会发生:
(1) ClientB 通过 Web 代理向http://mysite.com/getdata发起一个 http 请求,其令牌位于 http 标头中。
(2) 网络代理访问我的网络服务器,获取ClientB的数据。
(3) 我的网络服务器批准请求并返回 ClientB 的数据,因为一切都正确。
(4) ClientB 获取他的数据并正确显示
(5) 几乎在ClientB 得到他的数据的同一时间,ClientA 开始了同样的请求,请求头中带有ClientA 的token。
(6) Web代理找到ClientA请求的url与ClientB的相同,结果还在缓存中,然后返回ClientB的数据。然后 ClientA 获取另一个数据。
在我的 Web 应用程序界面中,一开始我已经设置了所有响应 no-cache、max-age=0 等以防止客户端缓存。我的问题是:
图像中的scanario会发生吗?
如果是,如何防止 Web 代理返回缓存数据?我无法修改PC客户端的程序,Web代理服务器不在我的控制范围内。
如果不是,A 获取 B 的数据的可能原因是什么?