2015-05-11 12 views
22

questa domanda è in parte rivolto alla mia domanda precedente: Ionic + Angular POST request return state 404Ionic + Angular - Come evitare "404 Not Found (dalla cache)" dopo la richiesta POST?

ma non è stato in grado di trovare la soluzione di lavoro.

problema è il seguente:

se faccio richiesta l'applicazione mobile in esecuzione sul dispositivo ottengo sempre risposta 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 
{,…} 

Ma se ho provato la stessa richiesta sul desktop utilizzando plugin di Postman nel browser Chrome ottengo sempre la risposta 200 con i dati di cui ho bisogno.

Ho pensato che si trattasse di un problema causato dal metodo Angular http ma nel post precedente mi è stato notato che non è vero.

Come posso evitare questo per favore? Devo impostare alcune intestazioni in HTML dell'app, durante la richiesta o sul lato server (PHP)?

Molte grazie per qualsiasi consiglio.

EDIT:

Ho provato anche Impostare la cache: true in questo modo:

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

Ma senza fortuna.

+0

Hai provato '{cache: false}'? – Zee

+0

Ciao, ho appena aggiornato la mia domanda. L'attributo della cache è stato inserito correttamente nella mia richiesta? – redrom

+0

Potrebbe essere un problema con il tuo server PHP. Prova 'header (" Cache-Control: no-store, no-cache, must-revalidate ");' in PHP. – Zee

risposta

44

A lot of people sono experiencing that.

Ho appena avuto lo stesso problema. Sembra che abbia a che fare con una nuova politica di sicurezza nelle nuove versioni di Cordova.

Ecco come ho risolto:

ho installato Cordova's whitelist plugin:

cordova plugin add cordova-plugin-whitelist 

Quindi, aggiungere la vostra politica contenuti nella vostra index.html come un meta tag (utilizzando il proprio host o '*' per accettando tutte le richieste):

<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 viene utilizzato per richieste generali; l'host ws://localhost:35729 viene utilizzato per il live-reload in ionic serve.

script-src viene utilizzato per l'esecuzione di script sicura

unsafe-inline e unsafe-eval sono necessari per angolare per funzionare correttamente.

data: gap: https://ssl.gstatic.com viene utilizzato solo su iOS.

self indica l'host corrente del file index.html.

È necessario aggiungere il proprio ordine affinché le richieste funzionino.Non dimenticare di aggiungere il protocollo e la porta se non sono standard

Puoi saltare il metatag se non lo desideri, ma riceverai molti avvisi dal plug-in della lista bianca.

Ulteriori informazioni su come configurare questo in the plugin's readme.

Quindi ricostruire l'app e dovrebbe funzionare di nuovo.

+0

Sì, era esattamente questo. Sconfiggi la testa per un'ora. Grazie! –

+0

Many thx: D !!! –

+0

OMG grazie mille! –

19

Aveva uno stesso problema, non serviva a niente, poi ho appena rimosso il plugin whitelist:

cordova plugin remove cordova-plugin-whitelist 

poi renstalled è

cordova plugin add cordova-plugin-whitelist 

allora funzionato

+3

Intendi 'plugin cordova', immagino? – j0k

+0

Super funziona !!! – praveenpds

+1

Grazie ragazzi! Questo errore mi costa un giorno lavorativo. –

4

Ho avuto lo stesso problema e Potrei risolverlo aggiungendo il seguente plugin:

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

Dopo molte ore, ho trovato uno soluzione che ha funzionato: run config.xml cordova plugin add cordova-plugin-whitelist

Nel mio caso, avevo già configurato e index.html sull'origine, come accennato qui e altrove.

0

Avevo un problema simile con il segno Firebase sul mio dispositivo Android ma potevo accedere al browser.

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

Utilizzato le righe precedenti per risolvere il problema.