Ядро asp.net с iis - https - при загрузке данных с помощью ajax соединение теряется

У меня есть веб-приложение, которое позволяет загружать изображения с камеры, оно публикует их с помощью ajax в объекте Blob. я заметил, что когда я использовал приложение со своего телефона с камерой высокого разрешения, в конечном итоге загрузка перестала работать. Я сделал тестовую страницу, которая просто загружает пустой массив данных в BLOB-объекте, чтобы проверить проблему, и обнаружил, что в конечном итоге соединение прерывается, и в конце концов сервер сообщает о его сбросе.

Я не знаю, куда мне покопаться, чтобы понять, почему это происходит. Еще немного информации: сервер aspnetcore (2.0) работает с iis. У меня нет проблемы при его локальном запуске, только когда он работает на сервере бесплатного уровня AWS, где я его размещаю (t2.micro). (я пробовал и сервер Ubuntu с nginx, и сервер Windows с iis, и у меня возникли проблемы с обоими) (я думаю, что оба из них используют обратный прокси-сервер, так что это может быть так), он использует ssl (сертификат от позволяет шифровать) и проверку подлинности cookie

это клиент, который делает звонок из JavaScript

<html>
 <head>
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>

<script type="text/javascript">

    $(function () {
        $("a.button").click(function () {
            var size = parseInt($("input.size")[0].value);
            var byteArray = new Uint8Array(size);
            var blob = new Blob([byteArray], { type: "application/octet-stream" })

            var fd = new FormData();
            fd.append("blob", blob);
            $(".message").text("sending " + size + " bytes");
            $.ajax({
                type: "POST",
                url: "/upload/test",
                data: fd,
                processData: false,
                contentType: false
            }).done(function (responsedata) {
                $(".message").text(responsedata);
            }).fail(function () {
                $(".message").text("failed");
            });
        });
    })

</script>
</head>
<body>
<input class="size" value="1024">
<div class="message"></div>
<a class="button" href="#">test</a>
</body>
</html>

в поле ввода указывается, сколько байтов нужно отправить при нажатии кнопки. чтобы воспроизвести проблему, я установил его на 2000000, и он будет работать первые 3 или 4 раза, но затем в конечном итоге он будет зависать, и ни одно обещание никогда не сработает (выполнено или не выполнено).

на сервере конец журнала чтения выглядит так, когда он зависает

https://pastebin.com/NBWjRhhS

Код [xxx] истек миллисекунды запроса, он читает около 1024 байтов в цикле, пока не прочитает весь запрос.

в конце вы можете увидеть 8-секундный промежуток между чтениями, затем вскоре после этого соединение будет сброшено.

Любое понимание или совет приветствуется.

0 ответов

Другие вопросы по тегам