origin headers falta control chrome cabecera allow javascript angularjs firefox cross-domain cors

headers - cors javascript



Solicitud CORS de Firefox que da ''Solicitud de origen cruzado bloqueada'' a pesar de los encabezados (9)

Intento hacer una solicitud simple de origen cruzado, y Firefox lo bloquea constantemente con este error:

Solicitud de origen cruzado bloqueada: la misma política de 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 mi servidor está respondiendo con

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 todo lo que no es Firefox. ¿Alguien puede ayudarme con esto?


Descubrí que mi problema era: que el servidor al que envié la solicitud cruzada tenía un certificado que no era de confianza.

Si desea conectarse a un dominio cruzado con https (firefox), primero debe agregar la excepción para este certificado.

Puede hacer esto, visite el enlace bloqueado una vez y agregue la excepción.

¡Espero que esto ayude a alguien!



Los archivos son auto explicativos. Haz un archivo, llámalo cualquier cosa. En mi caso jq2.php.

<html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script> // document is made ready so that the program starts when we load this page $(document).ready(function(){ // it tells that any key activity in the "subcat_search" filed will execute the query. $("#subcat_search").keyup(function(){ // we assemble the get link for the direction to our engine "gs.php". var link1 = "http://127.0.0.1/jqm/gs.php?needle=" + $("#subcat_search").val(); $.ajax({ url: link1, // ajax function is called sending the input string to "gs.php". success: function(result){ // result is stuffed in the label. $("#search_val").html(result); } }); }) }); </script> </head> <body> <!-- the input field for search string --> <input type="text" id="subcat_search"> <br> <!-- the output field for stuffing the output. --> <label id="search_val"></label> </body> </html>

Ahora incluiremos un motor, crearemos un archivo, lo llamaremos como prefiera. En mi caso, es gs.php.

$head = "https://maps.googleapis.com/maps/api/place/textsearch/json?query="; //our head $key = "your key here"; //your key $hay = $_GET[''needle'']; $hay = str_replace(" ", "+", $hay); //replacing the " " with "+" to design it as per the google''s requirement $kill = $head . $hay . "&key=" . $key; //assembling the string in proper way . print file_get_contents($kill);

Intenté mantener el ejemplo lo más simple 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.


Para mí, resultó que estaba configurando Access-Control-Allow-Origin a un host.com específico (y el correcto), pero tenía que ser http://host.com . ¿Qué hace Firefox? Se traga silenciosamente la solicitud GET y devuelve un estado 0 al XHR, sin advertencias enviadas a la consola de JavaScript, mientras que para otras fallas similares, al menos, podría decir algo. Ai ai.


Parece ser un error en Firefox 44 corregido en la versión 45.


Prueba esto, debería resolver tu problema

  1. En su config.php, agregue www pre en su dominio.com. Por ejemplo:

    HTTP define(''HTTP_SERVER'', ''http://domain name with www/''); HTTPS define(''HTTPS_SERVER'', ''http://domain name with www/'');

  2. Agregue esto a su archivo .htaccess

    RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L]


Resulta que esto no tiene nada que ver con CORS, era un problema con el certificado de seguridad. Errores engañosos = 4 horas de dolores de cabeza.


Solo agrega

<IfModule mod_headers.c> Header set Access-Control-Allow-Origin "*" </IfModule>

al archivo .htaccess en la raíz del sitio web con el que intentas conectarte.


Solo una palabra de advertencia. Finalmente solucioné el problema con Firefox y CORS.

La solución para mí fue esta publicación

Configuración de CORS (intercambio de recursos de origen cruzado) en Apache con encabezados de respuesta correctos que permiten todo a través | Benjamin Horn

Sin embargo, Firefox se comportaba de manera realmente extraña después de configurar esos encabezados en el servidor Apache (en la carpeta .htaccess).

console.log("Hi FF, you are here A") un montón de console.log("Hi FF, you are here A") etc. para ver qué estaba pasando.

Al principio parecía colgado en xhr.send() . Pero luego descubrí que no llegó a esta declaración. Puse otro console.log justo antes y no llegué, aunque no había nada entre el último console.log y el nuevo. Simplemente se detuvo entre dos console.log .

Reordenando líneas, borrando, para ver si había algún caracter 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, así que no sé cómo reproducirlo.

AVISO : Y, ¡oh, acabo de hacer que el Header always set partes, no la parte Rewrite* !