Estoy tratando de hacer una solicitud simple de origen cruzado, y Firefox la bloquea constantemente con este error:
Solicitud de origen cruzado bloqueada: la política de mismo origen no permite leer el recurso remoto en [url]. Esto se puede solucionar moviendo el recurso al mismo dominio o habilitando CORS. [url]
Funciona bien en Chrome y Safari.
Por lo que puedo decir, he configurado todos los encabezados correctos en mi PHP para permitir que esto funcione. Esto es lo que responde mi servidor
HTTP/1.1 200 OK
Date: Mon, 23 Jun 2014 17:15:20 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u8
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Request-Headers: X-Requested-With, accept, content-type
Vary: Accept-Encoding
Content-Length: 186
Content-Type: text/html
Intenté usar Angular, jQuery y un objeto XMLHTTPRequest básico, así:
var data = "id=1234"
var request = new XMLHttpRequest({mozSystem: true})
request.onload = onSuccess;
request.open('GET', 'https://myurl.com' + '?' + data, true)
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send()
... y funciona en todos los navegadores excepto Firefox. ¿Alguien puede ayudarme con esto?
javascript
firefox
cors
cross-domain
Godwhacker
fuente
fuente
mozSystem
no es compatible con sitios web normales que solo empaquetan aplicaciones de firefox-os , así que elimine esa opción.Accept application/json, text/plain, */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Length 35
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Host [url]
Origin [url]
Referer [referrer url]
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0
Error:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at [url]. This can be fixed by moving the resource to the same domain or enabling CORS. [url]
Respuestas:
Resulta que esto no tiene nada que ver con CORS, fue un problema con el certificado de seguridad. Errores engañosos = 4 horas de dolores de cabeza.
fuente
withCredentials=true
en la instancia XHR; de lo contrario, Firefox no pudo usar el certificado del cliente al realizar la solicitud (sin embargo, funcionó bien en Chrome).Descubrí que mi problema era que el servidor al que le envié la solicitud cruzada tenía un certificado que no era de confianza.
Si desea conectarse a un dominio cruzado con
https
, primero debe agregar una excepción para este certificado.Puede hacer esto visitando el enlace bloqueado una vez y agregando la excepción.
fuente
Encontré esta pregunta después de haber encontrado solicitudes en Firefox que estaban siendo bloqueadas con el mensaje:
Después de tirarme de los pelos, descubrí que una extensión de Firefox recién instalada, Privacy Badger, estaba bloqueando las solicitudes.
Si llega a esta pregunta después de rascarse la cabeza, intente verificar qué extensiones ha instalado para ver si alguna de ellas está bloqueando las solicitudes.
Consulte Razón: la solicitud CORS no se realizó correctamente en MDN para obtener más detalles.
fuente
Encontré una solución después de 2 días :(.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials
fuente
Si no tiene un certificado 'real' (y por lo tanto usa uno autofirmado), en FireFox puede ir a:
Allí, complete la ubicación, por ejemplo: https: //wwww.myserver: myport
fuente
Solo unas palabras de advertencia. Finalmente resolví el problema con Firefox y CORS.
La solución para mí fue esta publicación.
Configuración de CORS (uso compartido de recursos de origen cruzado) en Apache con encabezados de respuesta correctos que permitan que todo pase | Benjamin Horn
Sin embargo, Firefox se estaba comportando realmente, muy extraño después de configurar esos encabezados en el servidor Apache (en la carpeta .htaccess).
Agregué mucho,
console.log("Hi FF, you are here A")
etc. para ver qué estaba pasando.Al principio parecía colgado
xhr.send()
. Pero luego descubrí que no llegaba a esta declaración. Coloqué otroconsole.log
justo antes y no llegué, aunque no había nada entre el últimoconsole.log
y el nuevo. Simplemente se detuvo entre dosconsole.log
.Reordenando líneas, eliminando, para ver si había algún carácter extraño en el archivo. No encontré nada.
Reiniciar Firefox solucionó el problema.
Sí, debería presentar un error. Es solo que es tan extraño que no sé cómo reproducirlo.
AVISO : ¡Y, oh, solo hice las
Header always set
partes, no laRewrite*
parte!fuente
Solo agrega
al
.htaccess
archivo en la raíz del sitio web con el que está intentando conectarse.fuente
Para la posteridad, también verifique los registros del servidor para ver si el recurso que se solicita devuelve un 200.
Me encontré con un problema similar, donde todos los encabezados adecuados se devolvían en la solicitud ajax previa al vuelo, pero el navegador informó que la solicitud real estaba bloqueada debido a encabezados CORS incorrectos.
Resulta que la página solicitada devolvía un error 500 debido a un código incorrecto, pero solo cuando se obtuvo a través de CORS. El navegador (tanto Chrome como Firefox) informó erróneamente que faltaba el encabezado Access-Control-Allow-Origin en lugar de decir que la página devolvió un 500.
fuente
Prueba esto, debería resolver tu problema
En su config.php, agregue www pre en su dominio.com. Por ejemplo:
Agregue esto a su archivo .htaccess
fuente
Para mí, resulta que estaba configurando el
Access-Control-Allow-Origin
encabezado de respuesta en un específico (y el correcto)host.com
pero tenía que ser devuelto como en suhttp://host.com
lugar. ¿Qué hace Firefox? Se traga silenciosamente la solicitud GET y devuelve un estado 0 al XHR, sin salida de advertencias a la consola de JavaScript, mientras que para otras fallas similares al menos diría algo. Ai ai.fuente
Para depurar, verifique los registros del servidor si es posible. Firefox devuelve errores CORS en la consola por una gran variedad de razones.
Una de las razones es también el complemento uMatrix (y supongo que NoScript y similares).
fuente
Enfrenté un problema similar, y creo que es válido estar registrado como lo solucioné:
Tengo un sistema construido básicamente sobre Symfony 3. Por motivos de autoaprendizaje y rendimiento, decidí escribir algunos scripts usando GoLang, también una API con acceso público.
My Go API espera parámetros de formato Json y también devuelve una respuesta de formato Json
Para llamar a esos GoApi que estoy usando, la mayoría, $ .ajax (jQuery) La primera prueba fue un engaño: ¡la (poco) famosa ventana emergente "Solicitud de origen cruzado bloqueada"! Luego, intenté configurar "Access-Control-Allow-Origin: *" en apache conf, htaccess, php, javascript y en cualquier lugar que pudiera encontrar en google.
¡Pero, incluso, el mismo error frustrante!
La solución fue simple: tuve que hacer solicitudes "POST" en lugar de "GET".
Para lograr eso, tuve que ajustar ambos, GoLang y JavaScript para usar GET! Una vez hecho esto, no se me bloquearon más solicitudes de origen cruzado.
Espero eso ayude
PD:
Estoy usando apache y Vhost, en Directory Block tengo
Recuerde: "*" significa que aceptará solicitudes de cualquier persona. (Lo cual puede ser una falta de seguridad) En mi caso está bien, porque será una API pública
PS2: Mis encabezados
Encabezados de respuesta
Solicitar encabezados (469 B)
fuente
Si las respuestas mencionadas anteriormente no ayudan, verifique si el servidor backend está en funcionamiento o no, ya que en mi caso el servidor se bloqueó y este error resulta ser totalmente engañoso.
fuente
En mi caso fue mi ADBLOCKER ! Por alguna razón, estaba habilitado en mi host local y causaba este error en Firefox.
Deshabilitarlo o desinstalar el complemento debería solucionar este problema.
En su caso, puede que no sea un bloqueador de anuncios, sino otro complemento de Firefox. Pruébelo en modo incógnito primero sin complementos para determinar si ese es el problema y luego deshabilite sistemáticamente los complementos hasta que encuentre al culpable.
fuente
Los archivos se explican por sí mismos. Haz un archivo, llámalo como quieras. En mi caso jq2.php.
Ahora incluiremos un motor, crearemos un archivo, llámalo como quieras. En mi caso es gs.php.
He intentado que el ejemplo sea lo más sencillo posible. Y debido a que ejecuta el enlace en cada pulsación de tecla, la cuota de su API se consumirá bastante rápido.
Por supuesto, las cosas que podemos hacer no tienen fin, como poner los datos en una tabla, enviarlos a la base de datos, etc.
fuente