ASP 经典 IIS7.5 问题会导致响应标头出现在正文中



我最近在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站点,我要做的就是让它在新设置上正常运行。

我愣住了,外面有没有人见过这个?

事实证明,

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

试试这个:

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"

祝你好运。。。

最新更新