1

我最近在 Windows 2008 R2 上将一个经典的 ASP Web 应用程序从 IIS 6 移到了 IIS 7.5。这个网站在 IIS 6 上运行了 4 年多。在大多数情况下,该站点在 IIS 7.5 上运行良好,但是,当您加载页面时,有时会发生浏览器未正确处理响应的情况。结果,实际的响应标头在响应正文中返回,在<html>标记之前或标记之后</html>。当响应位于标记之前的顶部时<html>,最终用户可以在浏览器中看到它。

标头位于标签上方的示例响应<html>

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 9714
Content-Type: text/html
Server: Microsoft-IIS/7.5
P3P: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
Set-Cookie: CSB=UserType=3&Client=805157&FNAME=John+Doe&CAMS=False&Client%5FUser%5FMode=Online&Session=650680780&User=1&LastViewed=https%3A%2F%2Fsite%2Edomain%2Ecom%2Fcsb%2Fclient%2Fdefault%2Easp%3FClient%3D123456%26PBAT%3D654321%26BAT%3D654321&Username=jjd; path=/
X-Powered-By: ASP.NET
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />
        <title>some page</title>
        <script>...</script>
    </head>
    <body>
    </body>
</html>

响应标头的内容按字面意思呈现在浏览器的屏幕上。并非每个请求都会出现此问题。我已经成功地在 IE 和 Chrome 中重现了这个问题,但它是随机的,所以我一直在努力寻找根本原因。

有时标头会打印在</html>标签下方,并且不会在浏览器中呈现。

IIS 或 ASP 没有引发错误。我发现了这一点,并尝试在 IIS 中使用跟踪失败的请求模块,但它没有帮助,因为请求实际上并没有失败,所以没有什么可跟踪的。

我试过在 Fiddler 中查看流量,但我得到的只是响应大小大于标头声明的警告,这是因为实际的响应标头文本与响应正文一起返回。

服务器正在运行 Windows 防火墙和 eset 防病毒软件 - 但两者也在旧的 IIS 6 机器上运行。

在配置 IIS 方面,我已经完成了人们推荐的运行经典 ASP 的所有基础知识。

在 IIS 配置方面,我不是初学者,但这是我真正使用的唯一 ASP 站点,我要做的就是让它在新设置上正常运行。

我被卡住了,有没有人以前见过这个?

4

2 回答 2

1

事实证明,这是一个 ISAPI 过滤器的问题,该过滤器是由我们安装的存在错误的 Web 应用程序防火墙引入的。尽管我们在禁用 ISAPI 过滤器的情况下进行了测试,但事实证明我们必须完全删除 ISAPI 才能发现问题。供应商已经给了我们一个补丁来修复这个错误。谢谢您的帮助!

于 2012-11-30T18:55:16.270 回答
0

试试这个:

Response.Buffer=True

请让我知道这对你有没有用...

了解更多信息。关于 Response.Buffer 见http://www.w3schools.com/asp/met_clear.asp

或尝试以下代码之一。(一个一个看他们是否有效)

Response.Clear()
Response.ClearHeaders()
Response.Flush()
Response.End()
Response.AddHeader "Content-Length", "838100"

祝你好运...

于 2012-08-17T15:22:43.067 回答