Я тестирую службу SOAP, в которой есть одна операция, которая возвращает строку, содержащую документ XML. Мой сервер и клиент реализованы на PHP.
Вот источник для моего клиента:
<?php
header('Content-Type: text/xml, charset=iso-8859-1');
header("Content-Disposition: inline");
try{
$sClient = new SoapClient('http://localhost/soap/test.wsdl');
$response = $sClient->getDocument();
echo($response);
} catch(SoapFault $e){
var_dump($e);
}
?>
И это XML, возвращенный службой SOAP и отраженный клиентом:
<?xml version="1.0" encoding="iso-8859-1" ?>
<root>
<form formname="test">
<post postid="2000" userid="bbh" postdate="2011-09-14" posttime="11:03:32">
<item name="Item1" value="123" />
<item name="Item2" value="456" />
</post>
</form>
</root>
Когда я тестирую клиента SOAP в Firefox для Mac, Firefox для Windows и Safari, XML, возвращенный службой SOAP, правильно отображается в этих браузерах. Однако, когда я тестирую его на IE7 (на Windows 2003 Server), я получаю пустой экран, даже если я вижу XML, если я делаю просмотр источника на странице. Когда я тестирую его в IE8 (в Windows 7), я получаю всплывающее окно с надписью «Хотите сохранить этот файл или найти программу в Интернете для его загрузки?».
Кто-нибудь знает, почему XML не отображается правильно в IE7 и IE8?
UPDATE:
Вот HTTP-заголовки, которые я получил от Live HTTP-заголовков в Firefox:
http://localhost/soap/testclient.php
GET /soap/testclient.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0.1) Gecko/20100101 Firefox/5.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Cookie: PHPSESSID=bo6dlobivah1iaeu6d53vt9s10
Cache-Control: max-age=0
HTTP/1.1 200 OK
Connection: close
Date: Wed, 14 Sep 2011 11:09:57 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET, PHP/5.2.1
Content-Type: text/xml, charset=iso-8859-1