IE 新脚本标头

IE 新脚本标头

我有一个简单的 CGI 脚本,现在正在生产中运行,它返回一个 json 对象,因此它返回的内容类型是 application/x-javascript。在 Internet Explorer 中,要求下载此文件,但我可以成功下载它。

cgi脚本是perl,输出简单的json对象

#!/bin/perl
print "Cache-control: no-cache\n";
print "Content-type: application/x-javascript\n\n" ;
print "var whatever = { .. data here .. }";

我们正在迁移到新的服务器,我相信两个位置的 apache 设置类似。

问题是,IE 现在无法成功下载此文件。我收到此错误:

---------------------------
Windows Internet Explorer
---------------------------
Internet Explorer cannot download hero.cgi from lpdww554.trcw.us.aexp.com.

Internet Explorer was not able to open this Internet site.  The requested site is either unavailable or cannot be found.  Please try again later.
---------------------------
OK   
---------------------------

在调试中,我尝试了 text/plain、text/html 和 application/javascript,但都无济于事。使用文本时,输出在 IE 中正确显示,但不会在浏览器中执行 javascript。

此脚本在 Firefox 中有效,在 IE 中也在我的旧服务器上有效(它下载文件,但不显示在浏览器中)。我不明白为什么它在我的新服务器上不起作用,我确信这是一个 HTTP 标头问题。我已将标头发布在下面。

IE 新脚本标头

GET /path/script.cgi HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: en-us
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.2; MS-RTC LM 8)
Host: newserver.company.com:1091
Connection: Keep-Alive
Cookie: (cookie)

HTTP/1.1 200 OK
Date: Thu, 18 Aug 2011 18:42:56 GMT
Server: IBM_HTTP_Server
Cache-control: no-cache
Expires: 0
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/x-javascript

IE - 旧脚本标头

GET /path/script.cgi HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/xaml+xml,     application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Accept-Language: en-us
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.2; MS-RTC LM 8)
Host: oldserver.company.com
Connection: Keep-Alive
Cookie: cookie

HTTP/1.1 200 OK
Server: IBM_HTTP_Server
Content-Type: application/x-javascript
Date: Thu, 18 Aug 2011 18:43:39 GMT
Connection: keep-alive
Cache-Control: no-cache
Cache-Control: max-age=86400
Expires: Fri, 19 Aug 2011 18:43:38 GMT

答案1

也许旧域名已加入 IE7 的白名单,而新域名尚未加入。请检查 IE7 中旧域名和新域名的安全/站点设置。

由于它可以与您的旧网站一起使用,因此这应该不是问题,但是,至少 IE6 拒绝加载application/javascript并且只加载text/javascript,即使它现在已被弃用(RFC 4329)。不过,我对 IE7 一无所知。

答案2

事实证明 Transfer-Encoding:chunked 标头影响了这一点。

事实证明,我必须输出一个 Content-Length: 标头,这解决了问题。我通过将所有内容保存到变量中(而不是直接将其打印出来)来实现此目的,然后根据输出的 Length() 添加内容长度标头。

相关内容