AngularJS - how to disable OPTION request?

redrom picture redrom · Jul 9, 2014 · Viewed 12k times · Source

I noticed that my Angular is creating OPTIONS request also before each POST request.

I'm using custom API Service for HTTP request handling.

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",
        }
    });
}

}); 

Question is:

How can i disable it (which config values put where)?

Is OPTIONS good for something? I think that is it something like "Handshake between 2 servers".

Angular version: 1.2.15

Thanks for any advice.

Answer

Quentin picture Quentin · Jul 9, 2014

That isn't Angular. It is XMLHttpRequest.

Complex cross-origin HTTP requests require a pre-flight OPTIONS request so the browser can find out if the other server will grant permission for the Ajax request.

Short of making sure the Ajax request you are making is simple, there is no way to prevent the OPTIONS request.

A simple request:

  • Only uses GET, HEAD or POST. If POST is used to send data to the server, the Content-Type of the data sent to the server with the HTTP POST request is one of application/x-www-form-urlencoded, multipart/form-data, or text/plain.
  • Does not set custom headers with the HTTP Request (such as X-Modified, etc.)

Unless you wish to give up sending JSON, you can't use a simple request for this.