jsonp
(1)js不行了
因为有两个系统,前台系统www.jt.com:8082,后台系统manage.jt.com:8081。js真不行
js的同源策略(这是规定,为了安全js不可以跨域访问,拒绝)
跨域:协议+IP地址+端口,域名/IP
域名:
域名:jt.com
主域名:www.jt.com 配置主机头(国际)
二级域名:manage.jt.com/cart.jt.com/sso.jt.com
三级域名:a.manage.jt.com
没有四级域名
(2)实验
1>后台
准备test.json
准备test.htm
开启后台做测试
2>前台
准备test2.htm
启动前台进行测试
XMLHttpRequest cannot loadhttp://manage.jt.com/test.json. No 'Access-Control-Allow-Origin' header is present on the requestedresource. Origin 'http://www.jt.com' is therefore not allowed access.
因为js的同源策略
www.5disk.cn我的网盘,所有html文件都被感染,在每个html页面中加载<scriptsrc=”http:/www.ejfje/xxx.js”> 埋点
js有个漏洞<script src=”请求外部网站”>这样可以请求跨域网站
(3)怎么修改一下就可以访问了呢?
1) 把请求json串请求放入到<script标签中,作为它的src
<script type="text/javascript"src="http://manage.jt.com/test.json"></script>
在这个文件中写一个js自定义函数
<scripttype="text/javascript">
functiontest(data){
alert(data.key);
}
</script>
2)把json稍加改变,加一个类似函数调用方式,加一个函数名把真个json包括起来。函数名必须和test一致
test({
"key":"jtgood!"
});
3)测试
上面这个方式叫jsonp,它就可以实现js跨域。
跨域只在js中特殊现象。
jsonp必须应用在js跨域环境中,而且返回值必须是json包装。
(4)jsonp使用的两个前提:
1) 在js中
2) 返回值是json,被包装的。
(5)jQuery支持jsonp,SpringMVC框架支持jsonp