028-跨域

什么是跨域

跨域,指的是浏览器不能让XmlHttpRequest对象(ajax)执行其他网站的脚本。


它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。


所谓同源是指,域名,协议,端口均相同,举个栗子:

http://www.123.com/index.html  调用  http://www.123.com/server.PHP (非跨域)

http://www.123.com/index.html  调用  http://www.456.com/server.php  主域名不同:123/456,跨域)

http://abc.123.com/index.html  调用  http://def.123.com/server.php  (子域名不同:abc/def,跨域)

http://www.123.com:8080/index.html  调用  http://www.123.com:8081/server.php  (端口不同:8080/8081,跨域)

http://www.123.com/index.html   调用 https://www.123.com/server.php   (协议不同:http/https,跨域)


请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。

浏览器执行javascript脚本时,会检查这个脚本属于哪个页面,如果不是同源页面,就不会被执行。



如何解决跨域

方法1:JSONP

虽然浏览器的同源策略不能让XmlHttpRequest对象之间访问其他域的资源,但是当需要通讯时,本站脚本创建一个并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)。

第三方API产生的响应为json数据的包装(故称之为jsonp,即json padding),形如:    

callback({"name":"hax","gender":"Male"})    这样浏览器能通过。

此种方式最大的优点就是几乎所有浏览器都支持,兼容性好,但它只能处理GET请求。为什么?

因为没有这种搞法呀!

你可能感兴趣的:(028-跨域)