Recientemente (al momento de escribir este post) Chrome se ha actualizado para ser más seguro, y en ocasiones nos va a lanzar el error que dice:
Access to fetch at ‘dominio’ from origin ‘otro_dominio’ has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space local.
Es un error de CORS pero no de los errores que conocemos. Este es nuevo, y dice:
The request client is not a secure context and the resource is in more-private address space local.
Así que en este post te mostraré de qué va ese error y por qué me interesa.
Chrome bloquea solicitudes a localhost si no hay https
En palabras simples, lo que está pasando es lo que ves en el título. Obviamente esto tiene sus detalles y motivos explicados en este artículo.
Básicamente si no estás en un contexto seguro (un sitio con https o en localhost), tu app web no puede hacer llamadas (usando fetch por ejemplo) a localhost en un puerto distinto.
La solución es cambiarse a https. Así de simple, y no recomiendo otra manera de solucionarlo.
El problema con el plugin de impresión
Hace un tiempo hice un plugin para imprimir en impresoras térmicas desde JavaScript sin pedir confirmación.
El plugin crea un servidor local en localhost:8000 y acepta todas las peticiones desde otros sitios web, permitiendo que se imprima a través de solicitudes HTTP.
Aquí el problema es que si el sitio desde donde imprimes no es seguro, entonces no podrá invocar a mi plugin. Y en ese caso no puedo hacer nada, pues no depende de mí que tu sitio sea o no seguro.
La solución, como ya lo dije, es actualizar tu sitio a https o usar localhost. Así de simple, y no necesitas cambiar nada del código de impresión ni el plugin en sí.
El único problema que veo es con las IPs locales, pero no he tenido la oportunidad de probar el comportamiento.
De igual forma no te recomiendo mantener tu navegador desactualizado. Las actualizaciones de seguridad siempre son importantes, y somos nosotros quienes nos debemos adaptar a ellas.
Buenas tardes,
Me gusto lo que pusiste en el Blog, tarde o tempranos todos debemos actualizarnos para bien.
Quería saber si hay una forma de solucionarlo agregando CORS al servidor y al cliente por mientras para que siga funcionando hasta poder actualizar y funcione debidamente.
Gracias
Lo único que se me ocurre es cambiar de navegador. Creo que Firefox todavía acepta esas peticiones al momento de escribir este comentario
Como va Parzi, comentarte, a mi me daba un error de este tipo cuando intentaba hacer una XMLHttpRequest POST a un web service SOAP desde Chrome, no asi desde Microsoft Explorer, intentando conectar al web service desde Javascript, días después pude integrar el cliente Soap desde PHP y no surgió más el problema.
Saludos, muy bueno el blog!
Me agrada saber que haya funcionado. Gracias por su aporte.
Saludos y éxito!