Chrome блокирует передачу файлов при использовании XHR для передачи файлов на встроенный веб-сервер S7 при использовании HTTPS - PullRequest
0 голосов
/ 14 февраля 2019

Мне удалось реализовать встроенный веб-сервер с помощью микроконтроллера Renesas Synergy S7.Код сервера написан на C, и я использовал стек Synergy TCP - Netx Duo и Net Secure (для TLS).Целью проекта является передача файлов с ПК с помощью браузера на S7, и S7 сохраняет эти файлы на SD-карте.Мне удалось сделать это успешно с Chrome и края с HTTP.Я преобразовал в HTTPS, используя Net TLS стек.Я могу отображать свои веб-страницы, но передача файлов не работает на Chrome.Это будет работать на грани, но размер блока ограничен примерно 250 байтами.С помощью HTTP я могу передавать 1024 байта на чанк для обоих браузеров.Во всяком случае, моя главная задача - заставить эту штуку работать с Chrome, но если бы вы могли также предоставить мне решение по увеличению размера чанков для Edge, это было бы очень полезно.

Я посмотрел на CORS, ноЯ думаю, что это не имеет никакого отношения к этому, потому что все это одного происхождения.Кроме того, браузер не отправляет заголовки, которые его инициируют.

// Это код, который я использую для передачи файлов.oBlob содержит блок // Вот пример oBlob

var fd = new FormData();
oBlob = new Blob(["```", fileName, "$", size, "$", x, "$",  partFile, "***", crc16, "$"]);
fd.append("my-file", oBlob);
xhr.open("POST", "/Upload/", true);
xhr.responseType = 'text';
xhr.send(fd);

// Ниже приведен код javascript, который обрабатывает ответ от S7.

xhr.onreadystatechange = function() {
      if (xhr.readyState === 4 && xhr.status === 200) {
      var response = xhr.responseText;
      console.log(response);
      if(x < numLoops && response === "OK\0" && sendFlag === 1)
      {
        PartitionFile();
      }
      else if(response === "RESEND\0" && sendFlag === 1)
      {
        ResendFile();
      }
      else
      {
        SelectFile();
      }
    }
  };//end xhr.onreadystatechange

Я отправил текстфайл с буквами, и это то, что я получаю из Chrome: содержимое текстового файла не отправляются.Также я вижу ошибку в коде javascript прямо на xhr.send (fd), когда при наведении курсора на отметку x при проверке исходного кода.Ошибка: не удалось загрузить ресурс: net :: ERR_EMPTY_RESPONSE

=====================================================
Message from client...
POST /Upload/ HTTP/1.1
Host: 1.2.3.4
Connection: keep-alive
Content-Length: 268
Origin: https://1.2.3.4
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36   (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryA8KHeWAlLzwyGQQL
Accept: */*
Referer: https://1.2.3.4/File_Transfer.html?File+Transfer=File+Transfer
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

Number of bytes received = 494
=====================================================
=====================================================

Ниже указано, что я получаю от Edge (Как вы можете видеть, текстовый файл был отправлен, и я получил бы то же самое, используя Chrome, когдаиспользуя HTTP.)

=====================================================
Message from client...
POST /Upload/ HTTP/1.1
Origin: https://1.2.3.4
Referer: https://1.2.3.4/File_Transfer.html?  File+Transfer=File+Transfer
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36  (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134
Content-Type: multipart/form-data; boundary=---------------------------7e33012f20668
Accept: */*
Accept-Language: en-US
Accept-Encoding: gzip, deflate, br
Host: 1.2.3.4
Content-Length: 272
Connection: Keep-Alive
Cache-Control: no-cache

-----------------------------7e33012f20668
Content-Disposition: form-data; name="my-file"; filename="blob"
Content-Type: application/octet-stream

```TestFile.txt$43$1$AAAAAAAAAABBBBBBBBBBCCCCCCCCCCDDDDDDDDDDEEE***16322$
-----------------------------7e33012f20668--

Number of bytes received = 798
=====================================================

Если вы сравните oBlob с выводом текстового файла, вы увидите, как формируется пакет.

Похоже, что Chrome блокирует содержимое файла изотправляется при использовании SSL / TLS.Я также попытался извлечь вместо xhr и все тот же результат.Пожалуйста, помогите мне разобраться.

Спасибо.Jay

...