简体   繁体   中英

AngularJS - how to disable OPTION request?

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.

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.

I run into a close situation, need to get JSON with Cross-site HTTP requests and fixed it by using jQuery request, instead of 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");
    });

I used Amazon S3 CDN, and OPTIONS requests didn't work well with it, so this saved me. The answer from S3 server was:

This distribution is not configured to allow the HTTP request method that was used for this request. The distribution supports only cachable requests.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM