我有一个网页,返回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源文件无法查看
但我可以为您提供一个所需行为完美运行的网站(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>
答案 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