У меня есть простой сценарий 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. Я разместил свои заголовки ниже.
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
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
Оказывается, это повлияло на заголовок Transfer-Encoding: chunked.
Оказывается, мне пришлось вывести заголовок Content-Length :, это решило проблему. Я сделал это, сохранив все в переменной, вместо того, чтобы распечатывать ее напрямую, а затем добавил заголовок длины содержимого на основе Length () вывода.
Возможно, старый домен находится в белом списке вашего IE7, а новый еще нет. Проверьте настройки безопасности / сайта для вашего старого и нового домена в IE7.
Поскольку он работает с вашим старым сайтом, это не должно быть проблемой, однако, по крайней мере, IE6 отказывается загружаться application/javascript
и только грузы text/javascript
, хотя сейчас он устарел (RFC 4329). Хотя об IE7 понятия не имею.