Je viens de mettre à jour la nouvelle version sur Angular + Ionic et la méthode de traitement de la requête distante a cessé de fonctionner et renvoie toujours la réponse 404.
La demande suit:
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
{,…}
Le code de la méthode en cours de traitement de la requête distante est le suivant:
// 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
});
J'ai essayé de le résoudre en utilisant ce sujet:
AngularJs $ http.post () n'envoie pas de données
et
Angular + demande Ionic Post obtenant 404 introuvable
Mais sans chance.
Le côté serveur traite la demande de la manière suivante:
$inputJSON = file_get_contents('php://input');
$input= json_decode( $inputJSON, TRUE ); //convert JSON into array
Si j'essaie d'envoyer une demande en utilisant Postman ou Curl, tout semble fonctionner.
Informations ioniques:
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
Version AngularJS:
"version": "1.3.13",
Comment puis-je le résoudre s'il vous plaît?
Merci beaucoup pour tout conseil
Hum, je viens de rencontrer le même problème: l'en-tête suggère qu'il a été récupéré from cache
... Mais en réalité, il semble qu'il s'agisse d'une nouvelle politique de sécurité dans les nouvelles versions de Cordova.
Voici comment j'ai résolu le problème:
J'ai installé le plugin de liste blanche de Cordova :
cordova plugin add cordova-plugin-whitelist
Ensuite, ajoutez votre politique de contenu dans votre index.html
en tant que balise méta (en utilisant votre propre hôte ou '*' pour accepter toutes les demandes):
<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
est utilisé pour les requêtes générales; l'hôte ws://localhost:35729
est utilisé pour le rechargement en direct dans ionic serve
.
script-src
est utilisé pour l'exécution de script sécurisée
unsafe-inline
et unsafe-eval
sont nécessaires pour que angular fonctionne correctement.
data: gap: https://ssl.gstatic.com
est utilisé uniquement sur iOS.
self
désigne l'hôte actuel du fichier index.html
.
Vous devrez ajouter les vôtres pour que vos demandes fonctionnent. N'oubliez pas d'ajouter le protocole et le port s'ils ne sont pas standard
Vous pouvez ignorer la balise meta si vous ne le souhaitez pas, mais le plugin liste blanche vous avertira beaucoup.
Plus d'informations sur la façon de configurer ceci dans le readme du plugin .
Reconstruisez ensuite votre application et cela devrait fonctionner à nouveau.
J'ai également eu ce problème et recherché beaucoup puis finalement… J'ai enlevé le plugin de liste blanche:
cordova plugin remove cordova-plugin-whitelist
ensuite il l'a réinstallé
cordova plugin add cordova-plugin-whitelist
Cela m'a aidé et espère que cela résoudra votre problème
Cela faisait longtemps que je me débattais avec cela, mais le truc était d'installer le plug-in, de configurer le CSP dans index.html, puis de le supprimer et de l'ajouter à nouveau.