Jquery https上的xDomain ajax调用在fiddler中返回200,但仅从jQajax ie8抛出404
所有事实: 我有一个使用ajax与外部系统通信的程序 调用是使用amplify.js/jq定义的 由于我需要IE8的跨域支持,我正在使用一个haxe脚本来代理对我的调用,它将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
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
我不知道该怎么想,也不知道该往哪里看,真的很困惑,所以任何帮助或线索都将不胜感激
如果您认为我应该在这里添加任何进一步的相关细节,请让我知道
我目前的线索和想法:
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问题,我应该确保:
以前有人处理过这个问题吗?将应用这些并报告。好的,我想如果在这个时代还有另一个灵魂需要处理这个问题,我会添加答案 这确实是: 这就是工作:
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对象在那里使跨域请求成为可能。你不觉得吗?是的,我想我错过了。我将回滚我的编辑。很抱歉