xml - 无法使用 IE8 查看 XML 文件的源代码

标签 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 给我错误:

The XML source file is unavailable for viewing

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 响应 header :

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>

这是来 self 的(borken)xml 的响应 header :

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>

另见

最佳答案

tl;dr:no-cache 已打开

长版

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

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

Vary: *

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

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

Note The use of the vary:* header can disable all client caching.

所以我想知道“XML 源不可用于查看”的原因是否是存在强制 IE 在完成后立即删除 XML 源的策略(即不缓存它)

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

原始 header (失败)

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

也许如果我删除那些?我进入 fiddler 中的位置并手动删除这两行,留下:

删除缓存控制 header

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

删除该行将可缓存性保留为默认值(私有(private)),给出响应值:

Cache-Control: private

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

关于xml - 无法使用 IE8 查看 XML 文件的源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3153762/

相关文章:

xml - 找不到XML/LibXML.pm

python - Odoo:重用选项卡中另一个模型的 TreeView

xml - 如何在 Linux 中使用 sed 更改 XML 文件中的值?

http - 自定义登录页面的正确 http 状态代码是什么?

xml - 如何将特定属性转换为元素

java - 将 HTTP Get 请求解析为组成字段

javascript - 我如何 gzip 我的 JavaScript 和 CSS 文件?

IE 中的 CSS 中断

javascript - IE8 中的 AngularJS 错误

html - IE8 无法加载字体