Skip to content

Latest commit

 

History

History

same_origin_policy

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

Same-origin policy

https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy

  • La "Same-Origin policy" (politica del mismo origen) controla que sólo que los scripts que provengan del mismo origen (mismo esquema, hostname y puerto) y que son ejecutados en diferentes paginas (ventanas, tabs) puedan acceder sin restricciones a sus respectivos DOM

    Mismo Origen:

    http://site.com
    http://site.com/
    http://site.com/my/page.html

    Diferente Origen:

    http://www.site.com (another domain)
    http://site.org (another domain)
    https://site.com (another protocol)
    http://site.com:8080 (another port)
  • Esta politica se aplica tambien a las peticiones AJAX (XMLHttpRequest) lo que significa que sólo podremos hacer peticiones AJAX al host que sirve la pagina web donde se ejecuta el código

  • Los WebSockets no estan sujeto a esta politica (con ellos podras comunicar partes en diferentes dominios)

  • Esta politica viene implementada en TODOS los navegadores (antiguos y modernos)

  • De forma nativa, sólo podremos incluir recursos de otros dominios con los siguientes elementos:

Sin embargo existen maneras de "saltarse" esta politica: JSONP y CORS

## JSONP vs CORS

http://www.formandome.es/javascript/cors-vs-jsonp-solicitudes-ajax-entre-dominios/
http://blog.koalite.com/2012/03/sopa-de-siglas-ajax-json-jsonp-y-cors/
http://stackoverflow.com/questions/12296910/so-jsonp-or-cors

La recomendación general es usar CORS siempre que se pueda, pero hay que tener en cuenta lo siguiente:

  • CORS soporta mas metodos HTTP (GET, PUT, POST, DELETE) que JSONP (sólo GET)
  • Puedes utilizar JSONP en cualquier navegador (antiguo y moderno). Sin embargo CORS solo funcionará en algunos navegadores (los que soporten xhr2)
  • Hay mas API's publicas que ofrecen acceso a datos via JSONP que via CORS
  • CORS (el servidor decide a quien da acceso y cómo) es mas seguro que JSONP (cross-origin via script injection)
  • Con CORS hay un mejor manejo de errores que con JSONP
  • Tanto CORS como JSONP requieren que el servidor esté preparado para ellos