miércoles, 23 de diciembre de 2015

Políticas de Seguridad con JSON - JSONP

A veces no es posible hacer una llamada a Ajax a través de dominios distintos para traernos algún dato. Esto es una limitación en la programación web del lado del cliente y es debido a una restricción de seguridad de los navegadores. Esto es debido a una política de seguridad llamada: "Same-origin policy", pensada para evitar que se carguen mediante Javascript datos potencialmente inseguros, por estar en otros servidores.
Esta restricción se puede evitar si el dominio con el que te conectas está configurado para aceptar conexiones desde otros dominios. Esto se consigue activando la configuración "Cross-origin resource sharing", pero también puede solucionarse, independientemente de la configuración del servidor, a través del uso de JSONP.


Por qué JSONP puede accederlo

Para hacer posible el JSONP en situaciones cross-domain se usa una alternativa permitida de carga de scripts en una página. Como sabes, el navegador sí que acepta la carga de código Javascript que traigas con la etiqueta SCRIPT y el atributo src de otro dominio. Es la base de los servicios CDN.
<script src="http://example.com/alternativo/dominio"></script>
Debido a que eso no provoca ningún problema de seguridad, JSONP se aprovecha de ello para acceder de ese modo al recurso solicitado, inyectando ese script en la página y ejecutando su código para extraer el dato.

Nota: Si te llegase un JSON normal no podrías ejecutarlo tal cual. El JSON es un literal de objeto y no una sentencia Javascript que sea capaz de ejecutar el navegador, por ello no podrías meterlo tal cual en una etiqueta SCRIPT de la página.