Jquery https上的xDomain ajax调用在fiddler中返回200,但仅从jQajax ie8抛出404

Jquery https上的xDomain ajax调用在fiddler中返回200,但仅从jQajax ie8抛出404,jquery,ajax,internet-explorer-8,cross-domain,amplifyjs,Jquery,Ajax,Internet Explorer 8,Cross Domain,Amplifyjs,所有事实: 我有一个使用ajax与外部系统通信的程序 调用是使用amplify.js/jq定义的 由于我需要IE8的跨域支持,我正在使用一个haxe脚本来代理对我的调用,它将xhr对象替换为shr实现(SWFHttpRequest): 此xhr对象修改如下所示: amplify.subscribe("request.before.ajax", function (resource, settings, ajaxSettings, xhr) { if ($.browser.msie

所有事实:

我有一个使用ajax与外部系统通信的程序

调用是使用amplify.js/jq定义的

由于我需要IE8的跨域支持,我正在使用一个haxe脚本来代理对我的调用,它将
xhr
对象替换为
shr
实现(
SWFHttpRequest
):

此xhr对象修改如下所示:

amplify.subscribe("request.before.ajax", function (resource, settings, ajaxSettings, xhr) {
        if ($.browser.msie || !!navigator.userAgent.match(/Trident\/7\./)) {
            if (resource.url.indexOf(requestConfig.apiUrl) != -1) {
                var shr = new SWFHttpRequest(); // flash object adds this guy
                ajaxSettings.xhr = function () {
                    return shr;
                };
                ajaxSettings.crossDomain = false;
                ajaxSettings.error = function (e) {
                    var errorDialog = new gDialog({
                        title: "Error",
                        text: "Sorry, but there was an error in requesting information from our servers. Please contact support and provide the following information: response:"
                            + e.responseText + " statusText: "
                            + e.statusText + " status: "
                            + e.status + " from url: " + resource.url
                    })
                };
            }
        }            
    });
在SSL和Http上的非ie浏览器中,一切都正常工作(这并不奇怪)

在IE8+的HTTP和9+的HTTPS中一切正常

在IE8中,当通过HTTPS时,调用具有以下响应头:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
Access-Control-Allow-Methods: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Access-Control-Allow-Headers, Content-Type, Accept
X-Powered-By: ASP.NET
Date: Fri, 30 May 2014 10:40:51 GMT
Content-Length: 283

{"ResponseCode":200,"ResponseDescription":"OK","ResponseEntity":"P4w0uZrc2BMOjdLBYF1K2RT9Ku/rTAqDK/2st76YdwhaqGZB/Yw2QCC03ncZJXqDdGYRyty+EDmOwx9MYgZdAtUdfmygjZrD0ST8G/qc4Iwbp7I/r+X5PPbI1QNoiy1VOe7WNgXt7g12UKpRKzXhWvGCUOItA8z1VrsBXLxUtd6p45SmOjrIycKWBVRLPP37cXokvO+uiGuur1p7wF392Q=="}
这是正确的响应,我应该成功并继续,但相反,ajaxSettings。错误告诉我:

response:null 
statusText: Not Found 
status: 404 
from url: the correct endpoint url with correct matching protocol
我不知道该怎么想,也不知道该往哪里看,真的很困惑,所以任何帮助或线索都将不胜感激

如果您认为我应该在这里添加任何进一步的相关细节,请让我知道


我目前的线索和想法:

  • 这可能与IE8 JSON.parse bug有关吗
  • 如果是这样的话,使用https将如何出现此问题
  • 这与通常的json错误序列化问题无关,因为服务器响应格式正确
  • 显然,Microsoft.XMLDOM的SSL存在一些问题

    所以我想也许我还包括了haxe脚本的一部分,它引用了:

    public function onData( data:String ) {
            if (!this.active) return;
            var stringified = haxe.Json.stringify(haxe.Json.parse(data));
            var striginiedEscaped = StringTools.replace(stringified, "\\", "\\\\");
            ExternalInterface.call( [ "(function(instance, data){",
                "var shr = window.SWFHttpRequest.instances[instance];",
                "if (!shr) return;",
                "shr.status = 200;",
                "shr.statusText = 'OK';",
                "shr.readyState = 4;",
                "shr.responseText = data;",
                "try {",
                    "if (window.DOMParser) {",
                        "var dp = new DOMParser();",
                        "shr.responseXML = dp.parseFromString( data, 'text/xml' );",
                    "} else {",
                        "shr.responseXML = new ActiveXObject('Microsoft.XMLDOM');",
                        "shr.responseXML.async = 'false';",
                        "shr.responseXML.loadXML(data);",
                    "}",
                "} catch(error) { shr.responseXML = null; }",
                "if (shr.onreadystatechange && typeof shr.onreadystatechange=='function') shr.onreadystatechange();",
            "})" ].join(''), this.instance, striginiedEscaped);
        }
    
    Microsoft.XMLDOM存在SSL问题,我应该确保:

  • 在Internet Explorer的“工具”菜单上,单击“Internet选项”。在“高级”选项卡上,清除“不将加密页保存到磁盘”复选框
  • 确保服务器不发送任何缓存头
  • 在IIS中,在Microsoft管理控制台(MMC)管理单元中,右键单击XML文件。在HTTP标头选项卡上,关闭内容过期选项

  • 以前有人处理过这个问题吗?将应用这些并报告。

    好的,我想如果在这个时代还有另一个灵魂需要处理这个问题,我会添加答案

    这确实是:

    这就是工作:

    1. clear the Do not save encrypted pages to disk check box in IE
    
    2. Cache-Control: no-transform,public,max-age=300,s-maxage=900
    

    真不敢相信是2014年,我还得想想这些things@Ray谢谢你,伙计。但它确实与跨域有关系,因为flash对象在那里使跨域请求成为可能。你不觉得吗?是的,我想我错过了。我将回滚我的编辑。很抱歉