同源与跨域

题目1: 什么是同源策略

“同源策略(Same-Origin Policy)”,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略。所谓同源,就是必须协议、域名、端口都一致的,才叫做同源。 如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。
例如:http://www.12306.cn和https://www.12306.cn,由于协议不一致,就不是同源。http://127.0.0.1:8080/test1和http://localhost:8080/test1 也不属于同源,因为域名不一致。端口不同当然也不叫同源了。

https://www.zhihu.com/question/25427931

题目2: 什么是跨域?跨域有几种实现形式

js跨域是指通过js在不同的域之间进行数据传输或通信
跨域有这几种实现形式

  • JSONP
  • Cors
  • 降域
  • PostMessage

在题目5博客里会详细介绍

题目3: JSONP 的原理是什么

JSONP主要是利用,通过访问src的地址来访问任意域的接口,因为script没有收到同源策略的限制,可以访问任意域的接口。
当HTML中有时,服务器返回字符串和"content-type=javascript",浏览器会把字符串当成Javascript来解析。
目标服务器的接口监听到了请求,如果双方约定好了,在url定义一个参数(一般是callback),参数的内容是要调用的方法,服务器检查有没有这个参数,如果有,返回的数据是“方法名(JSON数据)”的形式。由于参数方法是事先定义好的,返回的方法会自动执行。

简而言之:
通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入。所以jsonp是需要服务器端的页面进行相应的配合的。

题目4: CORS是什么

CORS全称是跨域资源共享。
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

你可能感兴趣的:(同源与跨域)