H5跨域解决方式整理
以前工作中遇到过关于前端跨域访问问题,今天把解决方式总结整理一下。
1、jsonp(仅限GET请求,伪码):
String callback = request.getParameter("callback");
callback = checkCallback(callback);//防注入
//HttpServletResponse response
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.write(callback+"("+json+")"); //json就是业务json数据
其中checkCallback方法,是基于安全性考虑,防止前端提交一些脚本注入。
主要就是过滤掉callback中的script、javascript、<、> 等字符。
2、Cross-Origin Resource Sharing协议,需要浏览器支持:
response.setHeader("Access-Control-Allow-Origin", "https://xxx.xx.com");
response.setHeader("Access-Control-Allow-Credentials", "true");//允许发送cookie
服务器端的HttpServletResponse中设置一下就可以。
如果允许发送cookie,则Access-Control-Allow-Origin不能设置为 * 。
如果设置为 * ,则表示允许所有域名的脚本访问该资源,不过出于安全性,生产环境不要这样设置。
关于CORS协议详细介绍,可以参考这篇资料:http://www.ruanyifeng.com/blog/2016/04/cors.html