Подтвердить что ты не робот

Ionic + Angular - Как избежать "404 Not Found (from cache)" после запроса POST?

этот вопрос отчасти указывает на мой предыдущий вопрос: Ionic + Angular Состояние возврата запроса POST 404

Но я не смог найти рабочее решение.

Проблема следующая:

Если я выполняю запрос из мобильного приложения, запущенного на устройстве, я всегда получаю ответ 404:

Request Method:POST
Status Code:404 Not Found (from cache)
Request Headersview source
Accept:application/json, text/plain, */*
Content-Type:text/plain
Origin:file://
User-Agent:Mozilla/5.0 (Linux; Android 4.4.2; Lenovo Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36
Request Payloadview source
{,…}

Но если я попробовал тот же запрос на рабочем столе, используя плагин Postman в браузере Chrome, я всегда получаю ответ 200 с данными, которые мне нужны.

Я думал, что это проблема, вызванная методом Angular http, но в предыдущем сообщении я заметил, что это не так.

Как я могу избежать этого, пожалуйста? Должен ли я устанавливать некоторые заголовки в HTML-приложении, во время запроса или на стороне сервера (PHP)?

Большое спасибо за любой совет.

EDIT:

Я также попытался установить кеш: false следующим образом:

$http({
                method : 'POST',
                url : $scope.remoteUrl,
                data: postData,
                headers: headersData,
                cache: false,
                timeout: 10000
                // success response
            })

Но без везения.

4b9b3361

Ответ 1

A много людей испытывают это.

Я столкнулся с одной и той же проблемой. Кажется, это связано с новой политикой безопасности в новых версиях Кордовы.

Вот как я это решил:

Я установил Корневой плагин "Кордова" :

cordova plugin add cordova-plugin-whitelist

Затем добавьте свою политику содержимого в свой index.html как метатег (используя свой собственный хост или "*" для принятия всех запросов):

<meta http-equiv="Content-Security-Policy" content="default-src 'self' yourhost.com ws://localhost:35729 data: gap: https://ssl.gstatic.com; style-src 'self' 'unsafe-inline'; media-src *;script-src 'self' localhost:35729 'unsafe-eval' 'unsafe-inline';">

default-src используется для общих запросов; хост ws://localhost:35729 используется для перезагрузки в режиме ionic serve.

script-src используется для безопасного выполнения script

unsafe-inline и unsafe-eval требуются для правильной работы angular.

data: gap: https://ssl.gstatic.com используется только для iOS.

self означает текущий хост файла index.html.

Вам нужно будет добавить свои собственные, чтобы ваши запросы работали. Не забудьте добавить протокол и порт, если они нестандартные

Вы можете пропустить метатег, если вы этого не хотите, но вы получите много предупреждений из плагина whitelist.

Подробнее о том, как настроить это в плагин readme.

Затем перестройте свое приложение, и оно должно работать снова.

Ответ 2

Если у вас была такая же проблема, ничего не помогло, я просто удалил плагин whitelist:

cordova plugin remove cordova-plugin-whitelist

после этого установил его

cordova plugin add cordova-plugin-whitelist

тогда он работал

Ответ 3

У меня была та же проблема, и я смог ее решить, добавив следующий плагин:

ionic plugin add https://github.com/apache/cordova-plugin-whitelist.git

Ответ 4

После многих часов я нашел одно решение, которое сработало: запустите cordova plugin add cordova-plugin-whitelist

В моем случае, я уже сконфигурировал config.xml и index.html о происхождении, как упоминалось здесь и в другом месте.

Ответ 5

У меня была аналогичная проблема с знаком Firebase на моем устройстве Android, но я мог войти в браузер.

cordova plugin remove cordova-plugin-whitelist
cordova plugin add cordova-plugin-whitelist

Используемые выше строки для устранения проблемы.