如何清除winsock缓存的http重定向(301永久移动)

如何清除winsock缓存的http重定向(301永久移动),http,redirect,caching,winsock,Http,Redirect,Caching,Winsock,我正在使用winsock向internet发送http请求。我发现我计算机上的系统中有某种东西永久缓存了http 301移动响应。因此,如果我发送某个URL的GET请求,它将返回一个旧的响应,而不会将任何内容发送到web上。问题,因为缓存的响应有错误。我想清除缓存,但甚至不知道谁在做缓存 我知道如何在浏览器中清除此缓存。另外,当我使用wininet而不是winsock时,也没有问题。winsock的缓存在哪里?如何清除它 编辑:安德烈亚斯的回答下面是一些评论。我的程序在本地主机上作为代理运行,接

我正在使用winsock向internet发送http请求。我发现我计算机上的系统中有某种东西永久缓存了http 301移动响应。因此,如果我发送某个URL的GET请求,它将返回一个旧的响应,而不会将任何内容发送到web上。问题,因为缓存的响应有错误。我想清除缓存,但甚至不知道谁在做缓存

我知道如何在浏览器中清除此缓存。另外,当我使用wininet而不是winsock时,也没有问题。winsock的缓存在哪里?如何清除它

编辑:安德烈亚斯的回答下面是一些评论。我的程序在本地主机上作为代理运行,接收来自Firefox的请求并将它们发送到web上。所以请求是由Firefox设置的,主机头总是在那里。我认为这与我自己电脑上的winsock有关的原因是,如果我不使用我的代理服务器,Firefox将可以正常运行页面。没有301回应。但是Firefox也有这个问题(没有代理),直到我清除了它的历史记录(忘记这个网站)。这就是为什么我认为这一定是winsock缓存问题

由于Firefox在清除缓存时成功(没有代理),因此不能由我的ISP进行缓存。请注意,无论是否通过我的代理,发送的请求都是相同的。我没有改变任何事情。而且,正如我所说,wininet是有效的


我同意winsock对http一无所知。然而,winsock和web之间似乎存在某种缓存功能。还有什么其他的解释呢?我的代理在许多其他网站上都可以正常工作,但在一些网站上,我得到了带有错误位置标题的301永久移动回复。我如何才能了解更多有关正在发生的事情的信息?

Winsock不会缓存网页。它对HTTP一无所知,因此无法缓存HTTP响应

如果您确实只使用Winsock发送HTTP请求,并且直接(而不是通过代理)执行此操作,则必须是缓存请求的服务器。一些ISP使用它们,这通常会导致技术问题

但是,我不相信这是一个缓存问题。如果您使用Winsock发送HTTP请求,我怀疑您的HTTP请求更有可能出错。例如,现在许多服务器使用虚拟主机,因此要求客户端在HTTP头中发送“主机”字段,以便将请求分配给正确的虚拟服务器。如果不这样做,您将被错误的虚拟服务器服务。这可能是您收到HTTP 301永久移动响应的原因,也可能是它使用WinInet的原因(因为它发送正确的“主机”头字段)


然而,这与您声称发送特定URL的GET请求不会向internet发送任何内容相矛盾。到底是什么让你认为是这样的?你在使用网络数据包嗅探器吗?

我想我现在已经找到了。这毕竟不是缓存问题。某些服务器或子服务器中存在错误。一些常见的服务器框架,比如PHP。错误是这样的:如果我使用完整url(GET)请求站点的根文档,那么它将返回一个301永久移动响应,并带有错误的位置标题。如果我用GET/请求它,那么它会工作,并且我会以200 OK状态返回该文档

所以我现在要做的是检查目标是否是一个绝对url。如果是,我检查路径是否为空。如果是,我将目标更改为/


现在它工作了,我没有收到更多的301回复

你是说你的问题不只是一个网站,而是几个网站?是不是有多个物理HTTP服务器导致您获得HTTP 301响应?或者它可能是同一台物理服务器,只是一个不同的服务器?是您自己编写的代理程序,还是您只是在使用其他人的程序?如果你自己编码,你的代理程序到底做什么?它是否只是将从一个TCP连接接收的所有内容按原样转发到另一个TCP连接?或者ist是否以某种方式更改了内容?无论哪种方式,我都看不到任何缓存的机会,除非通过一个。因此,我怀疑您的程序中有一个bug是原因,假设是您自己编写的。假设是您自己编写的代理程序,如果您的程序生成了一个日志文件,记录了它成功接收和发送的所有内容(!)(而不是尝试发送失败),则可能会有所帮助。此信息有助于诊断问题。例如,它应该准确记录Winsock
send
函数实际发送的字节数(而不是它尝试发送的字节数)以及发送是否成功。记录实际内容也会有帮助。是的,有几个网站导致了这个问题,我现在怀疑这是某些服务器或子服务器中的一个bug。毕竟不是缓存问题。据我所知,所有有问题的站点都使用PHP子服务器。我现在的假设是,如果我真的得到了,错误就会生效,但是如果我真的得到了,它就会正常工作。我会尽快测试这个。据我记忆所及,当Firefox成功时,它总是做后者。但出于某种原因,它总是将前者发送给我的代理。是的,我自己编写了代理程序。它执行代理应该执行的操作。它只转发请求和响应。不过,我的目的是通过其他不具备完全代理能力的跃点进行过滤和代理,但这尚未实现。如果我的程序中有一个bug,它怎么能在绝大多数站点上正常工作?不管虚拟主机是什么,所有HTTP 1.1请求都需要
Host
头,但在HTTP 1.0请求中是可选的。根据,所有HTTP/1.1服务器“必须在请求中接受absoluteURI格式,即使HTTP/1.1客户端只在对代理的请求中生成它们。”因此,