Eddie Eddie - 5 months ago 41
Javascript Question

Http-Method changes from POST to OPTIONS when changing Content-Type

I am using closure library to do a simple POST. I think XhrIo should work because from my machine when I use any other rest client ,like Firefox browser app RESTClient or Chrome's Simple Rest Client , I can make POST request to the server and content type is application/json.

But from my application I am unable to make a post.
I am using the following code

xhr = new goog.net.XhrIo;
xhr.send('http://myhost:8181/customer/add','POST', goog.json.serialize(data));


If I leave the headers default, I get this


Encoding: UTF-8
Http-Method: POST
Content-Type: application/x-www-form-urlencoded;charset=UTF-8



If I try to change the header by passing
{'content-type':'application/json'}
as 4th parameter, header changes to


Http-Method: OPTIONS

Content-Type:


Shouldn't I be able to change headers appropriately with Closure library just as RESTClient does with XMLHttpRequest using JQuery ?

How else can the header be altered to make it appear like this


Encoding: UTF-8
Http-Method: POST
Content-Type: application/json;charset=UTF-8



Appreciate any help
Eddie

Answer Source

When you add a header to an XHR object, most browsers will do a preflight request, which is the OPTIONS method that you are seeing. There is not a way to circumvent this if you are adding custom headers, unfortunately. The POST will be sent after the OPTIONS.

This article explains the OPTIONS request a bit. I ran into issues with the preflight a while back, if that is any help.

If you have specific issues with the OPTIONS request you should edit your question to include them; otherwise, this is expected behavior.