2017-01-13 6 views
0

Я пытаюсь отправить запрос POST в API, который требует XML в тело запроса и ответы с данными XML. API находится в другом домене, поэтому CORS необходимо использовать. IE11 отправляет успешную предварительную проверку CORS. Вот упрощенный тест, который не удается из-за ошибки в Internet Explorer 11 на Windows 7:Ошибка сети в Internet Explorer 11, когда POSTing XML с CORS

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-stackoverflow', { 
 
      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>

Edit: Запуск из сниппета дают другую ошибку, вот pastebin с полным примером: http://pastebin.com/yTL7mrYF

Предпродажный запрос и сам почтовый запрос видны в инструментах dev. Для запроса POST отображается только заголовок ответа, но тело ответа говорит «Нет данных для просмотра».

Я вижу в Fiddler, что ответ отправляется обратно с сервера, но каким-то образом Internet Explorer не может его отобразить.

Услуга находится за Tyk, программным обеспечением для управления API.

Очевидно, что это работает в Firefox и Chrome.

ответ

1

Проблема заключается в сжатом отклике (спуск). Когда я удаляю заголовок запроса Accept-Encoding, ответ не сжимается и работает в Internet Explorer.