使用 CORS 发布 XML 时 Internet Explorer 11 上的网络错误
Network Error on Internet Explorer 11 when POSTing XML with CORS
我正在尝试向 API 发送 POST 请求,这需要在请求正文中包含 XML 并使用 XML 数据进行响应。 API 在另一个域中,因此必须使用 CORS。 IE11 发送成功的 CORS 预检。这是一个简化的测试用例,它在 Windows 7:
上的 Internet Explorer 11 上失败并出现以下错误
SCRIPT7002: XMLHttpRequest: Network Error 0x800c0007, No data is available for the requested resource.
var body = '<?xml version="1.0" encoding="UTF-8"?> '
+ '<Trias version="1.1" xmlns="http://www.vdv.de/trias" xmlns:siri="http://www.siri.org.uk/siri" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> '
+ ' <ServiceRequest> '
+ ' <siri:RequestTimestamp>2016-06-27T13:34:00</siri:RequestTimestamp> '
+ ' <siri:RequestorRef>EPSa</siri:RequestorRef> '
+ ' <RequestPayload> '
+ ' <StopEventRequest> '
+ ' <Location> '
+ ' <LocationRef> '
+ ' <StopPointRef>8502113</StopPointRef> '
+ ' </LocationRef> '
+ ' <DepArrTime>2017-01-03T10:22:00</DepArrTime>'
+ ' </Location> '
+ ' <Params> '
+ ' <NumberOfResults>1</NumberOfResults> '
+ ' <StopEventType>departure</StopEventType> '
+ ' <IncludePreviousCalls>true</IncludePreviousCalls> '
+ ' <IncludeOnwardCalls>true</IncludeOnwardCalls> '
+ ' <IncludeRealtimeData>true</IncludeRealtimeData> '
+ ' </Params> '
+ ' </StopEventRequest> '
+ ' </RequestPayload> '
+ ' </ServiceRequest> '
+ '</Trias> ';
$(document).ready(function() {
$('button').click(function() {
$.ajax('https://odpch-api.begasoft.ch/trias-Whosebug', {
method: 'POST',
headers: {
'Content-Type': 'text/xml',
'Authorization': '57c5dadd5e6307000100005e4365c41fa4d946a44ecbd19508fbef64'
},
data: body,
dataType: 'text'
}).done(function(data) {
$('#response').text(data);
});
});
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
<body>
<button>Ajax</button>
<div id="response"></div>
</body>
</html>
编辑:运行 它从片段中给出了另一个错误,这是带有完整示例的 pastebin:http://pastebin.com/yTL7mrYF
预检请求和 post 请求本身在开发工具中可见。对于 POST 请求,只有响应头可见,但响应正文显示 "No data to view".
我在 Fiddler 中看到响应从服务器发回,但是 Internet Explorer 无法显示它。
该服务位于 API 管理软件 Tyk 之后。
显然这适用于 Firefox 和 Chrome。
问题是压缩响应 (deflate)。当我删除 Accept-Encoding 请求 header 时,响应没有被压缩并且它在 Internet Explorer 中工作。
我正在尝试向 API 发送 POST 请求,这需要在请求正文中包含 XML 并使用 XML 数据进行响应。 API 在另一个域中,因此必须使用 CORS。 IE11 发送成功的 CORS 预检。这是一个简化的测试用例,它在 Windows 7:
上的 Internet Explorer 11 上失败并出现以下错误SCRIPT7002: XMLHttpRequest: Network Error 0x800c0007, No data is available for the requested resource.
var body = '<?xml version="1.0" encoding="UTF-8"?> '
+ '<Trias version="1.1" xmlns="http://www.vdv.de/trias" xmlns:siri="http://www.siri.org.uk/siri" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> '
+ ' <ServiceRequest> '
+ ' <siri:RequestTimestamp>2016-06-27T13:34:00</siri:RequestTimestamp> '
+ ' <siri:RequestorRef>EPSa</siri:RequestorRef> '
+ ' <RequestPayload> '
+ ' <StopEventRequest> '
+ ' <Location> '
+ ' <LocationRef> '
+ ' <StopPointRef>8502113</StopPointRef> '
+ ' </LocationRef> '
+ ' <DepArrTime>2017-01-03T10:22:00</DepArrTime>'
+ ' </Location> '
+ ' <Params> '
+ ' <NumberOfResults>1</NumberOfResults> '
+ ' <StopEventType>departure</StopEventType> '
+ ' <IncludePreviousCalls>true</IncludePreviousCalls> '
+ ' <IncludeOnwardCalls>true</IncludeOnwardCalls> '
+ ' <IncludeRealtimeData>true</IncludeRealtimeData> '
+ ' </Params> '
+ ' </StopEventRequest> '
+ ' </RequestPayload> '
+ ' </ServiceRequest> '
+ '</Trias> ';
$(document).ready(function() {
$('button').click(function() {
$.ajax('https://odpch-api.begasoft.ch/trias-Whosebug', {
method: 'POST',
headers: {
'Content-Type': 'text/xml',
'Authorization': '57c5dadd5e6307000100005e4365c41fa4d946a44ecbd19508fbef64'
},
data: body,
dataType: 'text'
}).done(function(data) {
$('#response').text(data);
});
});
});
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
<body>
<button>Ajax</button>
<div id="response"></div>
</body>
</html>
编辑:运行 它从片段中给出了另一个错误,这是带有完整示例的 pastebin:http://pastebin.com/yTL7mrYF
预检请求和 post 请求本身在开发工具中可见。对于 POST 请求,只有响应头可见,但响应正文显示 "No data to view".
我在 Fiddler 中看到响应从服务器发回,但是 Internet Explorer 无法显示它。
该服务位于 API 管理软件 Tyk 之后。
显然这适用于 Firefox 和 Chrome。
问题是压缩响应 (deflate)。当我删除 Accept-Encoding 请求 header 时,响应没有被压缩并且它在 Internet Explorer 中工作。