NetworkError при попытке отправить полезную нагрузку JSON на локальный хост через HTTP

Следующая ситуация: у меня есть несколько систем Linux с некоторыми простыми серверами http (api) Python. В тех же системах есть браузеры firefox, запускающие веб-приложение через ssl, открытое из другого места (веб-сервер локальной сети). Веб-приложение пытается связаться с этим локальным сервером API Python (только локально, в той же системе). Итак, приложение пытается отправить запрос на публикацию на localhost/127.0.0.1/[::1] через http. Это ситуация со смешанным содержимым, потому что приложение изначально работает через SSL (размещено на другом сервере). Firefox разрешает это при использовании 127.0.0.1, чтобы использовать localhost, мне пришлось изменить настройки безопасности (я сделал это только для проверки). И все завершается со следующей ошибкой: TypeError: NetworkError при попытке получить тестовый запрос ресурсов:

fetch ('http://127.0.0.1:8080', {method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(data)}).then(response => {console.log(response);});

Axios перехватывает исключение, но возвращаемые объекты ответа об ошибке пусты. data — это очень простой объект json с 3 полями.

Проблема в том, что эти системы работают под управлением Firefox версий 57-60. Я могу успешно воспроизвести ту же проблему на моем локально установленном FF 60.2.2 в Windows 10, так что, похоже, это действительно проблема Firefox.

Однако новейшие версии Firefox могут безупречно взаимодействовать без каких-либо изменений в коде JS (в Windows 10). Сервер Python принимает и поддерживает CORS.

У меня нет возможности обновить эти браузеры.

Теперь я сделал несколько тестов с запросами GET. И на удивление они работают! как:

fetch ('http://127.0.0.1:8080').then(response => {console.log(response);});

успешно. и это:

fetch ('http://127.0.0.1:8080', {method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(data)}).then(response => {console.log(response);});

терпит неудачу с:

TypeError: NetworkError when attempting to fetch resource.

Я бы заподозрил сервер python, но он работает с последними версиями FF в Windows 10. Кроме того, в инструментах разработчика Firefox я не вижу в сети ЛЮБОЙ попытки POST локального хоста, но я вижу эти тестовые GET, как если бы Firefox даже по какой-то странной причине не пытайтесь отправить POST на локальный http. Так что, может быть, я где-то делаю ошибку - почему, черт возьми, GET работает, а POST даже не отправляет эти старые версии FF?

Любая подсказка будет приятной.


person Tomasz Szkudlarek    schedule 12.08.2020    source источник
comment
Всего несколько центов, чтобы добавить - curl в той же системе также безупречно отправляет POST-запросы.   -  person Tomasz Szkudlarek    schedule 13.08.2020


Ответы (1)


Ну, это должен быть этот API-сервер Python и поддержка CORS (в конечном итоге совместимость CORS между старыми и новыми браузерами). Добавление опции mode: 'no-cors' к моему запросу на выборку решило проблему

person Tomasz Szkudlarek    schedule 13.08.2020