2014-07-09 24 views
9

Ho notato che il mio Angolare sta creando la richiesta OPTIONS anche prima di ogni richiesta POST.AngularJS - come disabilitare la richiesta OPTION?

Sto utilizzando il servizio API personalizzato per la gestione delle richieste HTTP.

app.service('ApiService', function ($http) { 

/** 
* Process remote POST request to give URL with given params 
* @param {String} url 
* @param {String} POST params 
* @return {JSON} response from server 
*/ 
this.doHttpRequest = function (type, url, params) { 
    return $http({ 
     method: type, 
     url: url, 
     data: params, 
     timeout: 5000, 
     headers: { 
      "Content-Type": "application/json", 
     } 
    }); 
} 

}); 

domanda è:

come posso disattivarlo (valori di configurazione messi dove)?

Le OPZIONI sono buone per qualcosa? Penso che sia qualcosa come "Handshake tra 2 server".

versione angolare: 1.2.15

Grazie per qualsiasi consiglio.

risposta

17

Questo non è angolare. È XMLHttpRequest.

Le complesse richieste HTTP di interconnessione richiedono a pre-flight OPTIONS request in modo che il browser possa scoprire se l'altro server concederà l'autorizzazione per la richiesta Ajax.

In mancanza di assicurarsi che la richiesta Ajax che si sta facendo sia simple, non c'è modo di impedire la richiesta OPTIONS.

una semplice richiesta:

  • solo gli impieghi GET, HEAD o POST. Se il POST viene utilizzato per inviare dati al server, il Content-Type dei dati inviati al server con la richiesta HTTP POST è uno di application/x-www-form-urlencoded, multipart/form-data o text/plain .
  • non imposta intestazioni personalizzate con la richiesta HTTP (ad esempio X-Modified, ecc)

A meno che non si vuole rinunciare invio di JSON, non è possibile utilizzare una semplice richiesta per questo.

2

mi imbatto in una situazione prossima, bisogno di ottenere JSON con Cross-site richieste HTTP e riparato utilizzando jQuery richiesta, invece di angularjs

$.getJSON('http://www.host.com/test.json', '', function (data) { 
    if (meta) { 
     console.log("jq success :" + JSON.stringify(data)); 
    } 
    console.log("jq success, but empty JSON"); 
}) 
    .done(function() { 
     console.log("jq second success"); 
    }) 
    .fail(function (data) { 
     console.log("jq fail " + JSON.stringify(data)); 
    }) 
    .always(function() { 
     console.log("jq complete"); 
    }); 

Ho usato Amazon Le richieste S3 CDN e OPZIONI non hanno funzionato bene, quindi questo mi ha salvato. La risposta dal server S3 era:

Questa distribuzione non è configurata per consentire il metodo di richiesta HTTP utilizzato per questa richiesta. La distribuzione supporta solo richieste intercambiabili.

Problemi correlati