www.flysnow.orgwww.flysnow.org要解决跨域问题的办法有CORS、代理和JSONP,这里结合Gin,主要介绍JSONP模式
JSONP原理
在生成这个这个对应的JS代码的时候,就比较有讲究了,一般是调用客户端网页已经存在的JS函数。
sayHelloalertdatahttp://localhost:8080/jsonp?callback=sayHellosayHelloContent-typeapplication/javascriptsayHello最终,我们的网页的源代码是这样的:
sayHelloGin JSONP 实现
JSONPc.JSONcallbackhttp://localhost:8080/jsonp?callback=sayHello"sayHellocallbackc.Render(code, render.JSON{Data: obj})c.JSONJSONP劫持
JSONP的方法其实是不推荐的,因为它的安全性是个问题,也就是JSONP劫持。JSONP劫持其实是JSON劫持的一部分,JSON劫持是包含JSONP劫持的。
JSON劫持还会稍微麻烦一些,因为需要数据是JSON数组,并且要重写JS Array的构建函数;而JSONP,因为有现成的JS回调函数,直接重写JS回调函数就可以了,JSONP让JSON劫持更简单了。
JSON劫持
上面我们介绍了JSON劫持,那么我们如何避免它呢?其实现在的浏览器基本上修复了这个问题,但是我们这里介绍下Gin防止JSON劫持的策略。
对于Gin,解决JSON劫持的方法很简单:
http://localhost:8080/secureJsonwhile(1);while(1);r.SecureJsonPrefixwhilefor小结
虽然Gin对JSONP提供了很好的支持,但是我们并不推荐使用,因为JSONP劫持问题,如果要跨域还是使用代理或者CORS比较好.
精彩文章推荐
flysnow_org