1

リクエスト本文に XML を必要とし、XML データで応答する API に POST リクエストを送信しようとしています。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-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>

編集: スニペットから実行すると、別のエラーが発生します。完全な例を含むペーストビンを次に示します: http://pastebin.com/yTL7mrYF

プリフライト リクエストとポスト リクエスト自体は、開発ツールに表示されます。POST 要求の場合、応答ヘッダーのみが表示されますが、応答本文には「表示するデータがありません」と表示されます。

サーバーから応答が返されることを Fiddler で確認しましたが、なぜか Internet Explorer では表示できません。

このサービスは、API 管理ソフトウェアである Tyk の背後にあります。

明らかに、これは Firefox と Chrome で機能します。

4

1 に答える 1

3

問題は、圧縮された応答 (deflate) です。Accept-Encoding 要求ヘッダーを削除すると、応答が圧縮されず、Internet Explorer で動作します。

于 2017-01-16T16:59:55.853 に答える