问题
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
回答1:
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.
回答2:
FWIW mine also failed to update the type when I specified...
{'content-type':'application/json'}
However, if I corrected the case to
{'Content-Type':'application/json'}
... it worked.
Go figure.
回答3:
If you are pass Content-Type
on authorization
request it will convert POST
method to OPTIONS
method so while we are use ouath and passing authorization token that time do not required Content-Type
.
So do not pass Content-Type
on all authorization
request it won't change your method POST
to OPTIONS
来源:https://stackoverflow.com/questions/11378075/http-method-changes-from-post-to-options-when-changing-content-type