【发布时间】:2020-02-08 07:03:39
【问题描述】:
我正在使用 winsock 向 Internet 发送 http 请求。我发现我计算机系统中的某些东西缓存了 http 301 永久移动的响应。因此,如果我为某个 URL 发送一个 GET 请求,它会返回一个旧响应,而不会将任何内容发送到网络上。问题,因为缓存的响应有问题。我想清除缓存,但甚至不知道谁在做缓存。
我知道如何清除浏览器中的缓存。另外,当我使用 wininet 而不是 winsock 时,没有问题。 winsock 的缓存在哪里,如何清除它?
编辑:安德烈亚斯在下面的回应引发了一些评论。我的程序在 localhost 上作为代理运行,接收来自 Firefox 的请求并将它们发送到网络上。因此请求是由 Firefox 设置的,并且主机标头始终存在。我认为这与我自己计算机上的 winsock 有关的原因是,如果我不使用代理服务器,Firefox 会正常获取页面。然后没有301响应。但是 Firefox 也有这个问题(没有代理),直到我清除了它的历史(忘记这个网站)。所以我觉得一定是winsock缓存问题。
由于 Firefox 在其缓存被清除时成功(没有代理),它不能是我的 ISP 进行缓存。请注意,无论是否通过我的代理,发出的请求都是相同的。我什么都不改变。另外,正如我所说,wininet 可以工作。
我同意 winsock 对 http 一无所知。然而,winsock 和具有缓存功能的 web 之间似乎存在某种东西。还能有什么其他解释?我的代理在许多其他站点上都可以正常工作,但是在一些站点上,我得到了这个 301 永久移动的响应,其中包含错误的位置标头。我怎样才能了解更多关于正在发生的事情?
【问题讨论】:
-
你是说你有这个问题不仅仅是一个站点,而是几个站点?导致您获得 HTTP 301 响应的不止一个物理 HTTP 服务器?或者它可能是同一个物理服务器,只是一个不同的virtual server?
-
您是自己编写了这个代理程序还是只是使用了别人的程序?如果您自己编写代码,您的代理程序究竟是做什么的?它是否只是将它从一个 TCP 连接接收到的所有内容原样转发到另一个 TCP 连接?或者 ist 是否以某种方式改变了内容?不管怎样,我看不到任何缓存的机会,除了transparent proxy。因此,假设您是自己编写的,我怀疑您的程序中存在错误。
-
假设您自己编写了代理程序,如果您的程序生成了一个包含它接收的所有内容以及它成功发送的所有内容的日志文件(!)(不是未成功尝试发送),它可能会有所帮助。此信息可能有助于诊断问题。例如,它应该准确记录 Winsock
send函数实际发送了多少字节(而不是它试图发送多少)以及发送是否成功。记录实际内容也可能会有所帮助。 -
是的,有几个站点导致了这个问题,我现在怀疑这是某些服务器或子服务器中的错误。毕竟不是缓存问题。据我所知,所有问题站点都使用 PHP 子服务器。我现在的假设是,如果我执行 GET example.com 错误会生效,但如果我执行 GET / 则一切正常。我会尽快对此进行测试。据我记得,当 Firefox 成功时,它总是后者。但由于某种原因,它总是将前者发送到我的代理。
-
是的,我自己编写了代理程序。它做了代理应该做的事情。它除了转发请求和响应之外什么都不做。不过,我的目的是通过其他不具备完整代理能力的跃点进行过滤和代理,但这还没有实现。如果我的程序中存在错误,它如何在大多数网站上正常工作?
标签: http redirect caching winsock