所以这里有一些我感到困惑的事情。
我正在开发一个需要解析XML数据的Javascript,并且我正在使用jQuery的$.ajax来获取和解析数据。除了我用Internet Explorer8测试之外,它在任何地方都工作得很好(在7和9上可能也有问题)。在IE上,我得到了解析错误。我安装了一个console.log来检查HTTP头。这是我从Windows XP上的Chrome和IE上得到的东西--
Chrome:
Date: Sat, 09 Apr 2011 16:06:24 GMT
Connection: Keep-Alive
Content-Length: 2283
Last-Modified: Sat, 09 Apr 2011 15:59:12 GMT
Server: Apache/2.2.14 (Ubuntu)
ETag: "48048-8eb-4a07e6c693400"
Content-Type: application/xml
Accept-Ranges: bytes
Keep-Alive: timeout=15, max=97IE8:
LOG: ETag: "48048-8eb-4a07d7a3cbe40"
Keep-Alive: timeout=15, max=97
Content-Type: text/html
Content-Length: 2283
Last-Modified: Sat, 09 Apr 2011 14:51:29 GMT这是xml文档的样子:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<tweet>
<name>name</name>
<message>message</message>
<avatar>avatar</avatar>
</tweet>
<tweet>
<name>name</name>
<message>message</message>
<avatar>avatar</avatar>
</tweet>
</root>我检查了我的Apache服务器的MIME配置,它被设置为以'application/ xml‘的形式发送xml文件。所以向Chrome发送一个内容类型为'application/xml‘的消息很奇怪,但IE得到的内容类型却是'text/html’。
所以我构建了一个简单的PHP脚本:
<?php
header('Content-type: application/xml; charset=UTF-8');
echo '<?xml version="1.0" encoding="UTF-8" ?>';
?>
<root>
<tweet>
<name>name</name>
<message>message</message>
<avatar>avatar</avatar>
</tweet>
<tweet>
<name>name</name>
<message>message</message>
<avatar>avatar</avatar>
</tweet>
</root>当我更改Javascript以检索PHP而不是XML文件时,我得到了这些响应头--
Chrome与PHP:
Date: Sat, 09 Apr 2011 16:10:39 GMT
X-Powered-By: PHP/5.2.10-2ubuntu6.7
Connection: Keep-Alive
Content-Length: 2102
Server: Apache/2.2.14 (Ubuntu)
Content-Type: application/xml; charset=UTF-8
Keep-Alive: timeout=15, max=97使用PHP的IE:
LOG: X-Powered-By: PHP/5.2.10-2ubuntu6.7
Content-Length: 2102
Keep-Alive: timeout=15, max=100
Content-Type: application/xml; charset=UTF-8因此,就我有限的Apache知识而言,即使我将原始XML文件配置为发送“application/xml”,但它似乎只被发送到IE,而没有正确的内容类型。Chrome正在接收正确的内容类型。当我使用PHP时,Apache似乎是按照我的意愿发送'application/xml‘,因为这就是我在脚本中标记的内容。IE没有和Chrome一样的头,这是不是也很奇怪?实例缺少"Server“。
那么,是什么阻碍了Internet Explorer将“application/xml”更改为“text/html”呢?我不喜欢依赖PHP脚本来输出XML数据。我想到了mod-deflate,但我禁用了它,结果是一样的。
有什么想法吗?
(PS -我包含的XML只是一个示例,因此内容长度不匹配)
发布于 2011-04-10 01:34:35
所以我想我想通了。
似乎IE缓存AJAX GET数据的方式很难(不可能?)把它清理干净。也许我在某个时候将xml配置为text/xml,但我不这么认为。基本上,IE继续使用该XML文件的缓存结果,而不是实际的服务器结果。这也解释了为什么HTTP头看起来如此奇怪(例如,没有服务器信息)。或者,缓存可能总是生成text/html (我放弃了进一步的测试)。
我的解决方案是:我在GET请求中的URL末尾添加了一个'?avoidcache=‘+一个时间戳。现在,IE获得了我在服务器上设置的正确的HTTP标头。
哇,我讨厌I浏览器。有多少开发小时被浪费在为它可怕的行为创建变通方法上?
发布于 2011-04-10 00:39:23
IE可能会发送不同的HTTP请求,主要请求text/html,或者只请求,另一方面也请求chrome application/xml。你检查过HTTP请求头了吗?
另外,您是如何检查HTTP数据包的?也许IE丢掉了服务器标签?(无论如何,这在大多数情况下都是非常无用的。)
当您使用PHP进行测试时,设置了content-type,并且工作正常,这是一个you服务器设置和/或HTTP请求的区别。看看这些。
https://stackoverflow.com/questions/5606237
复制相似问题