无法使用IE8查看XML文件的来源

时间:2010-06-30 22:04:18

标签: xml http internet-explorer-8

我有一个网页,返回XML xsl样式表转换,例如:

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='/css/homepage.xsl'?>
<MyData>
   ...
</MyData>

它正确地将转换后的XSL显示为HTML。但是当我尝试查看XML源时,Internet Explorer给出了错误:

  

XML源文件无法查看

Someclaim此行为为by design

但我可以为您提供一个所需行为完美运行的网站(Blizzards WoW Armory)(即您可以查看xml源代码):

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/_layout/pageIndex.xsl"?>
<page globalSearch="1" lang="es_mx" requestUrl="/index.xml" type="front">
  <pageIndex>
    <related-info/>
  </pageIndex>
</page>

因此,“这种行为是设计的”这一论点被直接观察所证实。

我的 XML有什么问题,无法显示源XML?


引导你走错路

以下是一些补充信息。

来自暴雪(工作)网站的Http响应标题:

GET http://www.wowarmory.com/ HTTP/1.1

HTTP/1.1 200 OK
...
Content-Type: text/xml;charset=UTF-8
Content-Length: 233

<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/_layout/pageIndex.xsl"?><page globalSearch="1" lang="es_mx" requestUrl="/index.xml" type="front">
  <pageIndex>
    <related-info/>
  </pageIndex>
</page>

以下是my(borken)xml的响应头:

GET http://www.example.com/default.ashx HTTP/1.1

HTTP/1.1 200 OK
...
Content-Type: text/xml; charset=utf-8
...
Content-Length: 131974

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/xsl' href='/css/homepage.xsl'?>
<MyData>
   ...
</MyData>

另见

4 个答案:

答案 0 :(得分:2)

tl; dr no-cache已开启

长版

我偶然发现了一个有类似问题的人的博客文章:

使用Fiddler的自动调试功能(我从未使用过的功能),他缩小了响应头中特定条目的存在范围:

Vary: *

他不明白为什么这个标题导致IE中断,但他能够删除它,并解决了他的问题。我的回复中没有vary: 0标题,但确实给了我指示。

我正在阅读处理此选项的文档:HttpCachePolicy.SetOmitVaryStar Method。有一件事引起了我的注意:

  

注意   使用vary:*标头可以禁用所有客户端缓存。

所以我想知道“XML源无法查看”的原因是,有一个策略强制IE一旦完成就删除XML源(即不要缓存它)< / p>

跟随这个家伙的脚步,我挖出小提琴手并在响应功能后打开自动断点。事实证明,您可以使用响应标头,重新排列,添加,更改,删除内容。

原始标题(失败)

HTTP/1.1 200 OK
Date: Thu, 01 Jul 2010 02:53:35 GMT
Server: Microsoft-IIS/7.0
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/xml; charset=utf-8
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Content-Length: 134772
Via: 1.1 www.example.com

<?xml version="1.0" encoding="utf-8"?>
...

我注意到我的标题包含与缓存相关的条目:

Cache-Control: no-cache
Pragma: no-cache

也许如果我删除那些?我在提琴手中进入现场并手动删除这两行,留下:

删除缓存控制标头

HTTP/1.1 200 OK
Date: Thu, 01 Jul 2010 02:55:06 GMT
Server: Microsoft-IIS/7.0
Content-Type: text/xml; charset=utf-8
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Content-Length: 134772
Via: 1.1 www.example.com

<?xml version="1.0" encoding="utf-8"?>
...

注意:标题不存在错误,内容始终陈旧,我希望客户端每次都刷新。

我的初始解决方案解决了这个问题,但引入了一个新问题 - 因为内容 总是陈旧的。虽然我希望每次都能获取 ie ,但我真的不希望它删除自己的本地副本。

ashx中让我悲伤的一行是:

//client don't cache it (it's too volatile)
context.Response.Cache.SetCacheability(HttpCacheability.NoCache); 

变成:

Cache-Control: no-cache

删除该行会将Cacheability作为其默认值(Private),并给出响应值:

Cache-Control: private

这允许客户端缓存内容,我可以在浏览器中查看源。

答案 1 :(得分:1)

我无法重现此行为。检查我的XML / XSLT驱动的网站http://www.aranedabienesraices.com.ar

使用IE8,我可以看到源和转换结果(工具菜单)。

它可能与私有缓存有关吗?

答案 2 :(得分:0)

我今天在Internet Explorer 9中遇到了同样的问题,但使用了兼容性视图以及它在开发人员工具中提供的7和8版本。

我在.htaccess

中有这个
<FilesMatch "\.(php)$">
    Header unset Cache-Control
    Header set Cache-Control "max-age=86400, s-maxage=86400, no-store"
    Header set Pragma "cache"
    Header set Expires "Mon, 5 Aug 2013 20:00:00 GMT"
</FilesMatch>

将缓存控制标头更改为存储,现在我可以看到文件的xml源

<FilesMatch "\.(php)$">
    Header unset Cache-Control
    Header set Cache-Control "max-age=86400, s-maxage=86400, store"
    Header set Pragma "cache"
    Header set Expires "Mon, 5 Aug 2013 20:00:00 GMT"
</FilesMatch>

我遇到了这个错误,试图找出为什么在Windows和Linux中的每个浏览器上看起来没问题的页面在兼容性视图或旧版本的Explorer中都不起作用。这个问题仍然是一个谜,因为文档和标题设置为utf-8。但那是另一回事。

答案 3 :(得分:0)

我遇到了同样的问题。我将Response.ContentType更改为“text / xml”,之前是“application / xml”。 “text / xml”格式允许“查看源”。

What's the difference between text/xml vs application/xml for webservice response