我的网站托管在 Windows Server 2008 R2 中。我们有一个软件,可以使用 winsock 从我们的网站下载更新。它对所有客户(过去几年超过 20000 个)都运行正常。我发现在我的一些客户的计算机中,它从网站下载旧文件而不是新文件。例如,它下载名为 update.txt 的文件 update.txt.old,而不是下载 update.txt。实际上,update.txt.old 是我们保留在服务器中的旧文件。
我已经检查了使用 chrome 浏览文件的情况,并且下载了正确的文件。我尝试使用 netsh winsock reset
命令、重置 Internet Explorer、清除缓存、临时文件等,但问题仍未解决。
那么有谁知道这个奇怪的错误,我该如何排除故障?
答案1
通常此类问题是由客户端缓存引起的(例如用于访问互联网的缓存代理)。您可以尝试使用 Cache-Control 标头从服务器端处理它,但这不是 100% 的解决方案。您还可以另外指定内容类型(例如内容类型:application/octet-stream) 供您下载。
答案2
这可能是由于缓存造成的,无论是服务器端还是客户端(或者有时介于两者之间,如企业网络缓存)。
一个常见的混淆源是文件日期倒退。例如,如果您将某些文件还原为备份版本。您的服务器发现缓存比文件修改时间更新,因此会告诉客户端或中间缓存,可以继续使用其缓存版本,尽管自下载该版本以来服务器上的内容已发生变化(即还原)。
如果你在 URL 中添加一些虚假参数,你能获得正确的内容吗?例如http://example.com/update.txt?bogus=[random_stuff]. 编辑:如果这不能让您获得文件的正确版本,那么缓存就不是您的问题。
清除浏览器缓存有帮助吗?
硬刷新有帮助吗?例如 Firefox 中的 ctrl-shift-R。有时这会清除当前页面和嵌入资源的 URL 的服务器端或中间缓存。
编辑:您说看到的结果取决于所涉及的 HTTP 客户端。找出实际涉及的查询的不同之处。有多种方法可以在服务器端执行该操作,但如果请求未加密,最好只使用 wireshark 和/或 ngrep 之类的工具来从线路中截取请求。