Buenas,
Tengo creada una API Rest a la que trato de acceder desde otro dominio mediante Ajax.
Para hacer el crossdomain hago uso de la tecnica Cross Domain Resource Sharing (CORS).
Código Javascript
:
Ver originalvar createCORSRequest = function(method, url){
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr){
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined"){
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
xhr = null;
}
return xhr;
}
var performAsyncCall = function(url, method, data, callback) {
var request = createCORSRequest(method, url);
if (request) {
request.onload = function(){
if (request.readyState == 4 ) {
if(request.status == 200){
callback(request.responseText);
}
else if(request.status == 400) {
console.error('Error 400')
}
else {
console.error('Error when calling performing remote call: ' + request.status)
}
}
};
request.send(data);
}
}
Cuando accedo a recursos mediante GET no tengo problema alguno.
Sin embargo, ahora intento hacer un PUT (open("PUT", url)) para realizar una modificacion y en este caso siempre me esta devolviendo un error:
Cita: XMLHttpRequest cannot load
http://miDominio/nomApp/update/p/34000. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://otroDominio' is therefore not allowed access.
Las cabeceras de la request generadas parecen correctas:
Origin:http://otroDominio
Access-Control-Request-Headers:content-type
Access-Control-Request-Method:PUT
Sin embargo al hacer la peticion, veo en el navegador que la realiza enviando un request-method OPTIONS, en lugar de PUT
Remote Address:192.168.216.43:80
Request URL:http://miDomibnio/miApp/update/p/34000
Request Method:OPTIONS
Status Code:200 OK
Y las Response Headers:
Allow:OPTIONS, PUT
Connection:Keep-Alive
Content-Length:0
Content-Type:text/plain
Date:Fri, 15 May 2015 12:30:02 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.2.12 (Win32) DAV/2 mod_ssl/2.2.12 OpenSSL/0.9.8k mod_autoindex_color mod_jk/1.2.28
Es como si cambiase el metodo PUT por OPTIONS.
He probado con GET y con POST y funciona sin problemas. Para poder continuar he tenido que cambiar el recurso rest para que responda por POST

, pero me da rabia ya que se trata de una modificacion y me gustaria hacerlo por rest estricto.
A alguien se le ocurre que puedo estar haciendo mal?
Muchas gracias