Monday, May 20, 2024
161
rated 0 times [  168] [ 7]  / answers: 1 / hits: 76494  / 13 Years ago, wed, november 16, 2011, 12:00:00

i have this code:



net.requestXHR = function() {
this.xhr = null;
if(window.XMLHttpRequest === undefined) {
window.XMLHttpRequest = function() {
try {
// Use the latest version of the activex object if available
this.xhr = new ActiveXObject(Msxml2.XMLHTTP.6.0);
}
catch(e1) {
try {
// Otherwise fall back on an older version
this.xhr = new ActiveXObject(Mxsml2.XMLHTTP.3.0);
}
catch(e2) {
//Otherwise, throw an error
this.xhr = new Error(Ajax not supported in your browser);
}
}
};
}
else
this.xhr = new XMLHttpRequest();
}
net.requestXHR.prototype.post = function(url, data) {
if(this.xhr != null) {
this.xhr.open(POST, url);
this.xhr.setRequestHeader(Content-Type, application/json);
this.xhr.send(data);
}
}

var rs = new net.requestSpeech();
console.log(JSON.stringify(interaction));
rs.post(http://localhost:8111, JSON.stringify(interaction));


when the send execute, i have this log:



OPTIONS http://localhost:8111/ [HTTP/1.1 405 Method Not Allowed 74ms]


And in localhost:8111 i have a reslet serverResource that accept post, it is problem of same origin policy? i have modify the restlet to put the allow-origin header and i test it with another GET http request (in jquery) and work ok. I have the problem of same origin resolve because i use an html5 browser and my server put the headers in the response, so why the send shows me this error? why change POST for OPTION?
Thanks!




Possible duplicate?: I think no, but it's true, the problem is the
same for both questions, but mine are refers since the question that
there is an issue with the browser, and the other, first points to
jquery. By experience the time does not count for duplicate, the
answers are different but it's true that both questions complement
each other.



More From » xmlhttprequest

 Answers
42

Yes, this is a problem with same-origin policy. You are making your request either to a different server or to a different port, meaning that it is a cross-site HTTP request. Here is what the documentation has to say about such requests:




Additionally, for HTTP request methods that can cause side-effects on
server's data (in particular, for HTTP methods other than GET, or for
POST usage with certain MIME types), the specification mandates that
browsers preflight the request, soliciting supported methods from
the server with an HTTP OPTIONS request method, and then, upon
approval from the server, sending the actual request with the actual
HTTP request method.




There is a more detailed description in the CORS standard (Cross-Origin Request with Preflight section). Your server needs to allow the OPTIONS request and send a response with Access-Control-Allow-Origin, Access-Control-Allow-Headers and Access-Control-Allow-Methods headers allowing the request. Then the browser will make the actual POST request.


[#89079] Tuesday, November 15, 2011, 13 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
brynn

Total Points: 448
Total Questions: 83
Total Answers: 118

Location: Albania
Member since Sun, Nov 22, 2020
4 Years ago
;