Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] CrossDomain con CORS

Estas en el tema de CrossDomain con CORS en el foro de Javascript en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 15/05/2015, 06:05
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Pregunta CrossDomain con CORS

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 original
  1. var createCORSRequest = function(method, url){
  2.         var xhr = new XMLHttpRequest();
  3.         if ("withCredentials" in xhr){
  4.             xhr.open(method, url, true);
  5.         } else if (typeof XDomainRequest != "undefined"){
  6.             xhr = new XDomainRequest();
  7.             xhr.open(method, url);
  8.         } else {
  9.             xhr = null;
  10.         }
  11.         return xhr;
  12.     }
  13.    
  14.     var performAsyncCall = function(url, method, data, callback) {
  15.         var request = createCORSRequest(method, url);
  16.         if (request) {
  17.             request.onload = function(){
  18.                 if (request.readyState == 4 ) {
  19.                    if(request.status == 200){
  20.                        callback(request.responseText);
  21.                    }
  22.                    else if(request.status == 400) {
  23.                       console.error('Error 400')
  24.                    }
  25.                    else {
  26.                        console.error('Error when calling performing remote call: ' + request.status)
  27.                    }
  28.                 }
  29.             };
  30.            
  31.             request.send(data);
  32.         }
  33.     }

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
__________________
If to err is human, then programmers are the most human of us

Última edición por Profesor_Falken; 15/05/2015 a las 06:40

Etiquetas: ajax, crossdomain
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:55.