【问题标题】:Unable to View Source of an XML file using IE8无法使用 IE8 查看 XML 文件的源
【发布时间】:2010-06-30 22:04:18
【问题描述】:

我有一个返回 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>

这里是来自我的 (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>

另见

【问题讨论】:

  • 我不知道错误,但是例如(wowarmory.com/search.xml):即使文件扩展名是.xml,文件被提供为text/html
  • @digitalFresh 主页不是.xml,我的主页也不是。

标签: xml http internet-explorer-8


【解决方案1】:

tl;drno-cache 已开启

加长版

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

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

Vary: *

他不明白为什么这个标题会导致 IE 崩溃,但他能够将其删除,并且解决了他的问题。我的回复中没有 vary: 0 标头,但它确实给了我一个方向。

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

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

所以我想知道“无法查看 XML 源”的原因是否是有一个政策强制 IE 在 XML 源完成后立即删除它(即不要缓存它)

跟随这家伙的脚步,我挖出了fiddler,开启了响应后自动断点功能。事实证明,您可以处理响应标头,重新排列、添加、更改、删​​除内容。

原始标题(失败)

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 保留为其默认值(私有),并给出响应值:

Cache-Control: private

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

【讨论】:

  • 所以,就像我说的那样,它可以缓存标题。
  • @Alejandro 是的,似乎是;以不存在私有缓存的方式
【解决方案2】:

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

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

会不会和私有缓存有关?

【讨论】:

  • 您的页面是xhtml,带有样式表;而不是任意的xml(即它仍然是html,浏览器可以这样看待它)
  • @Ian Boyd:你检查标题了吗? IE 不处理'xhtml'。 xml 是什么发送槽线。这是xhtml 的转换结果。如果我发送html,那将不会发生任何变化。
【解决方案3】:

这几天我在 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 中的每个浏览器上看起来都正常的页面在兼容性视图或旧版本的资源管理器中无法正常工作时遇到了这个错误。这个问题仍然是个谜,因为文档和标题设置为 utf-8。但这是另一回事。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      相关资源
      最近更新 更多