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

Ионное + Angular Состояние возврата запроса POST 404

Я только что обновил новую версию на Angular + Ionic и метод обработки удаленного запроса прекратил работать и возвращает всегда 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
{,…}

Код метода, обрабатывающего удаленный запрос, следующий:

    // set transfer credentials
                $http({
                    method : 'POST',
                    url : $scope.remoteUrl,
                    data: {img_base64: "/9j/4AAQSkZ"},
                    headers: 'application/json',
                    timeout: 10000
                    // success response
                }).success(function(data, status, headers, config) {
                    //SUCESSS
                    } else {
                    //PROCESSING ERROR                     
}

                    // error response
                }).error(function(data, status, headers, config) {
                    // ERROR
                });

Я попытался решить эту проблему с помощью этой темы:

AngularJs $http.post() не отправляет данные

и

Angular + Ионный запрос на отправку сообщения 404 не найден

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

Серверная сторона обрабатывает запрос таким образом:

$inputJSON = file_get_contents('php://input');
    $input= json_decode( $inputJSON, TRUE ); //convert JSON into array

Если я пытаюсь отправить запрос с помощью Postman или Curl, все, кажется, работает.

Ионная информация:

Node Version: v0.12.2
Cordova CLI: 5.0.0
Ionic CLI Version: 1.3.22
Xcode version: Xcode 6.3.1 Build version 6D1002 
ios-sim version: Not installed
ios-deploy version: Not installed

Версия AngularJS:

"version": "1.3.13",

Как я могу решить эту проблему?

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

4b9b3361

Ответ 1

Hum, я просто столкнулся с одной и той же проблемой: заголовок предполагает, что он был извлечен from cache... Но на самом деле, похоже, он связан с новой политикой безопасности в новых версиях Cordova.

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

Я установил плагин для белого списка Cordova:

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

Я долгое время боролся с этим, но трюк состоял в том, чтобы установить плагин, настроить CSP в index.html, а затем удалить плагин, добавив его снова.

Ответ 4

В состоянии ответа (from cache) указывается, что ваш браузер кэшировал плохой ответ и воспроизводит его обратно. Попробуйте очистить кеш или использовать любые методы перебора кэша.