Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Uso de CORS

Estas en el tema de Uso de CORS en el foro de Javascript en Foros del Web. Buenas, mas que nada debo informar que soy un completo extraño en este nuevo tema y ademas quiero expresar que es mi intensión mantenerme en ...
  #1 (permalink)  
Antiguo 27/03/2016, 19:40
 
Fecha de Ingreso: diciembre-2014
Ubicación: montería
Mensajes: 33
Antigüedad: 9 años, 4 meses
Puntos: 0
Busqueda Uso de CORS

Buenas, mas que nada debo informar que soy un completo extraño en este nuevo tema y ademas quiero expresar que es mi intensión mantenerme en lo posible alejado de las implementaciones JQUERY para esta solución.

En Internet he encontrado buena documentación, que es posible que no hubiese podido interpretar con toda claridad, incluso he leido secciones de guias tan relevantes como mozilla: https://developer.mozilla.org/en-US/...s_control_CORS y la w3: https://www.w3.org/TR/2008/WD-access-control-20080912/ que ciertamente son muy clasificadores...

Al grano...

Mostrare algo muy sencillo:

tengo un fichero php de donde voy a consumir los datos a través de AJAX, teniendo en cuenta información obtenida en internet debo garantizar la instrucción Access-Control-Allow-Origin: * ya sea en la configuración de apache (Vulnerabilidad global) o en la cabecera de los archivos a los que voy a consumir (Para mi seria lo ideal). «Aclararé que aunque mostrare el segundo método ya le he intentado usado el primero» concluyendo un archivo así:

fichero: dominio2/servidor.php
Código PHP:
Ver original
  1. header("Access-Control-Allow-Origin: *");
  2. header("Access-Control-Allow-Methods: POST");
  3. header("Content-type", "application/json");
  4.  
  5. echo json_encode([1,2,3]);

fichero: dominio1/consultor.html «Extraccion de codigo JS »
Código Javascript:
Ver original
  1. var invocation = new XMLHttpRequest();
  2. var url = 'dominio2/servidor.php';
  3. /** Funcion que he copiado de la MSDN **/
  4. function callOtherDomain() {
  5.     if (invocation)
  6.     {
  7.         invocation.open('POST', url);
  8.         invocation.setRequestHeader("Access-Control-Allow-Origin", "*");
  9.         invocation.setRequestHeader("Access-Control-Allow-Methods", "POST");
  10.         invocation.setRequestHeader("Content-type", "application/json");
  11.        /** handler es una funcion **/
  12.         invocation.onreadystatechange = handler;
  13.         invocation.send();
  14.     }
  15. }
  16. callOtherDomain();

El error que presento en consola es el siguiente:
Código Error:
Ver original
  1. XMLHttpRequest cannot load http://dominio2/servidor.php. Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers in preflight response.


He intentado un sin numero de cambios, pero no he logrado realizar el consumo de datos que deseo por parte de consultor.html, ya he tratado realizando diferentes pruebas en local implementando diferentes dominios gracias a configuraciones virtualhost de apache como a continuación:

http://localhost/proyecto1 => mi-servidor.local
http://localhost/proyecto2 => mi-consultor.local

Ambos proyectos son accesibles desde sus Host Virtuales, pero requiero que mi-consultor.local pueda realizar peticiones a mi-servidor.local

¿Que estoy haciendo mal?
  #2 (permalink)  
Antiguo 29/03/2016, 01:48
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Uso de CORS

El mensaje indica que no has establecido las Access-Control-Allow-Headers. Añádelas y prueba.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 28/04/2016, 12:02
 
Fecha de Ingreso: diciembre-2014
Ubicación: montería
Mensajes: 33
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Uso de CORS

La solución estuvo en eliminar las sentencias invocation.setRequestHeader del código JavaScript, puesto estas cabeceras están definidas en el fichero PHP a acceder por CORS o al menos supongo que ha eso debe ligarse, en algún momento buscare información detallada sobre esto, por ahora la solucion me permite continuar con mi trabajo.

Etiquetas: ajax
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 19:14.