Hola buenas, estoy siguiendo el libro de introducción a AJAX y se me ha presentado un problema que no consigo resolver.
Estoy en el capitulo 9, en el ejercicio 20, y es que a la hora de intentar hacer una peticion HEAD a www.google.com, siempre recibo este mensaje en Google Chrome.
XMLHttpRequest cannot load http://www.google.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.
En Firefox no me da ese problema, y parece que la petición la realiza correctamente.
He intentado indagar un poco en Google, y he dado con esto enlace
Según entiendo, el problema viene de realizar una peticion a una pagina que está en un dominio diferente. La cosa está en que no consigo solucionarlo.
Repito que en Firefox parece que funciona correctamente (al menos en la consola no me aparece ningun error), no he probado en IE ya que trabajo en un sistema Linux.
¿Alguien puede echarme un cable?
Respuestas
Añado que en el enlace que he puesto, dice esto:
Supporting CORS on the Client
Most clients (such as browsers) use the XMLHttpRequest object to make a cross-domain request. XMLHttpRequest takes care of all the work of inserting the right headers and handling the CORS interaction with the server. This means you don't add any new code to take advantage of CORS support, it will simply work as expected for Google Cloud Storage buckets configured for CORS.
Segun entiendo ahi, en el lado del cliente no es necesario hacer nada, el navegador se encarga de hacerlo automaticamente.
@sagramor86
@sagramor86 el principal problema que te está sucediendo se llama Same Origin Policy y consiste básicamente en que no puedes realizar conexiones con cualquier servidor remoto desde otro servidor, a menos que el primer servidor te lo permita.
Como Google seguramente no permita las peticiones HEAD
realizadas mediante AJAX desde otros servidores, no vas a poder realizar esta conexión. Si quieres permitir las conexiones para tus propias aplicaciones de servidor, tienes que utilizar lo que se llama CORS. Si utilizas por ejemplo el servidor Apache y quieres permitir cualquier tipo de petición, añade lo siguiente en tu configuración:
Header set Access-Control-Allow-Origin "*"
Por último, al parecer Google Chrome es un poco reticente a considerar que localhost
es un origen válido para las peticiones, por lo que es posible que tengas que hacer alguna configuración adicional en tu aplicación, tal y como se explica en este artículo.
@javiereguiluz
Pues no consigo solucionar el problema, he probado a subir el archivo a un servidor remoto a ver si funciona y tampoco, asi que el problema que indicas de Google Chrome con localhost no es la causa. Voy a pasar al siguiente ejercicio porque ya he perdido mucho tiempo con este. Si alguien ha conseguido hacer el ejercicio que por favor indique como lo ha hecho.
@sagramor86
¿Ya probaste con esta extensión de Chrome? Allow-Control-Allow-Origin: *
@nitrosama
usa la opción --disable-web-security
@sergalpe
Solo tienes que agregar lo siguiente en tu archivo php al que estas haciendo referencia:
<?php header("Access-Control-Allow-Origin: *");
@danielkyd0077