IIS6 是否有秘密、未记录、透明、区分大小写的代理?

IIS6 是否有秘密、未记录、透明、区分大小写的代理?

IIS 是否内置有秘密、未记录、透明、区分大小写的代理?

网络服务器上存在一个文件:

GET http://www.stackoverflow.com/javascript/ModifyQuoteArea.js HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-US
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: www.stackoverflow.com


HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Length: 29246
Date: Mon, 07 Mar 2011 14:20:07 GMT
Content-Type: application/x-javascript
ETag: "5a0a6178edacb1:1c51"
Server: Microsoft-IIS/6.0
Last-Modified: Fri, 02 Tue 2010 17:03:32 GMT
Accept-Ranges: bytes
X-Powered-By: ASP.NET

...

问题是,对文件所做的更改将不会得到处理,老的(即去年二月)版本不断被提供:

HTTP/1.1 200 OK
Connection: Keep-Alive
Content-Length: 29246
Date: Mon, 07 Mar 2011 14:23:07 GMT
Content-Type: application/x-javascript
ETag: "5a0a6178edacb1:1c51"
Server: Microsoft-IIS/6.0
Last-Modified: Fri, 02 Tue 2010 17:03:32 GMT
Accept-Ranges: bytes
X-Powered-By: ASP.NET

...

即使我们已经:

  • 重命名文件
  • 删除了文件
  • 重新启动 IIS

对此文件的请求未出现在 IIS 日志中(例如C:\WINNT\System32\LogFiles\W3SVC7\

并且这只会从外部(即互联网)发生。如果您在服务器本地发出请求,那么您将:

  • 获取当前文件(那里的文件)
  • 404(文件已重命名)
  • 404(文件已删除)

但如果我改变案件所请求的资源,即:

GET http://www.stackoverflow.com/javascript/MoDiFyQuOtEArEa.js HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-US
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: www.stackoverflow.com

注:MoDiFyQuOtEArEa.js诗句ModifyQuoteArea.js

然后我获取正确的文件(或者如果文件被重命名或删除,则会像我预期的那样获取 404)。

但是,在我更改我所要求的文件的大小写之前,对文件的任何后续更改都不会显示出来。

当网站提供其中一个神秘的缓存文件时,IIS 日志显示没有活动。对其他(即 ASP)文件的请求(或使用更改请求的资源情况以绕过透明缓存技巧)确实会出现在 IIS 日志中,并且会显示正确的源客户端 IP 地址(即,而不是某些神秘的中间代理的地址)。

  • 由于该文件不再存在于硬盘上,因此我得出结论,存在代理。
  • 该代理提供的服务请求不会记录在 IIS 日志中。
  • 记录了对新文件的请求,并且来自客户端 IP,而不是代理 IP。
  • 代理区分大小写。

才不是听起来像是微软或 IIS 会做的事情: - 透明代理? - 区分大小写? - 未记录? - 重启 IIS 后依然存在? - 在缓存中存活数小时?

不敢相信我们客户的 IIS 正在做这些事情。我假设 IIS 前面还有其他透明代理。

或者,IIS 是否有:

  • 透明的,
  • 未记录,
  • 区分大小写,
  • 基于记忆

代理,缓存内容至少 7 个小时?

答案1

如果请求未出现在 IIS 日志中,则表明该请求由某个地方的缓存提供服务,该缓存要么是客户端的本地缓存,要么是请求链中某个地方的缓存(代理)。

查看客户端请求的响应标头,看看Via:其中是否有任何标头。Via:标头表示链中有一个代理,并且链中的每个代理都应该有一个标头(假设代理运行正常)。如果您看到一个或多个标头,则很有可能内容是从缓存中提供的。

答案2

在我戴上锡纸帽并宣称一定有一个无人知晓的超级秘密代理之前,我会要求客户检查他们的浏览器设置。如果他们使用的是 IE,这听起来有点像“检查存储页面的较新版本:从不”(如果客户在故障排除过程中没有重新启动 IE,也可以是“每次启动 IE 时”)。

答案3

尝试 curl -vhttp://www.stackoverflow.com/javascript/ModifyQuoteArea.js,如果您仍然看到旧版本,则说明从客户端到服务器的路径中存在错误配置/不符合 HTTP 标准的缓存。如果您看到当前版本,则您的浏览器将受到指责

答案4

所以答案是“不应该”。

以问题的形式给出较长的回答:你在那里展示的代理行为是非常类似代理,因为主机名是请求的一部分。您是否将服务器视为代理,还是仅捕获来自代理的流量?

通常,当客户端请求内容时,他们会请求一个相对 URL 并提供一个 Host: 标头。

客户端向代理服务器请求http://fullsomethingname.fqdn.com 仅当目标配置为代理时,之前我不得不基于此来调试奇怪的行为。

因此,我们可以肯定地说,您在混合中某处有一个代理。Fiddler 充当代理,算数。

我建议像 Ochoto 一样尝试使用 Curl、WFETCH、WGET 或任何其他简单的不受 WinInet 或 IE 浏览器设置或代理缓存干扰的客户端绝对地肯定。

实际上,如果你想要绝对确定:

  • 在客户端上运行的网络捕获
  • 在服务器上同时进行网络捕获
  • 使用浏览器客户端请求所述内容
  • 使用非浏览器客户端请求相同内容
  • 如果你有 IIS 7,那么 URL 的 FREB 日志记录将非常棒
  • 理想情况下,能够在 Web 服务器处理每个扩展时逐步执行该操作;否则,可以使用 IISTrace 之类的工具

如果您真的愿意,您也可以加入 HTTP.SYS 跟踪,以确保万无一失。

如果

  • 你看到请求到达了服务器,并且
  • 服务器发送响应,并且
  • 该响应绝对未被服务器记录,并且
  • 不存在 ISAPI 筛选器,因此无法确定日志记录所以1999 年,或
  • 只是窒息
  • 没有受到杀毒软件的骚扰该文件句柄是有效的,不,它不是,你明白,毕竟它是方式,以及
  • 托管处理程序中没有发生任何异常,这些异常不应该针对静态文件运行,但由于某种原因,仍然通过脚本映射到处理这些文件

然后,然后然后 然后,嗯,哦,抱歉,我思路中断了。

相关内容