跨域的三种实现方式
来源:互联网 发布:蜂窝移动数据开关失效 编辑:程序博客网 时间:2024/06/15 07:06
一.跨域
由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一个与当前页面地址不同即为跨域
前页面地址与发送请求的url的协议、域名、端口三者之间任意一个地址不同,既为跨域,哪怕不同域名指向的同一地址,也是跨域。
二.方案
1.script标签加载
browser:html>js
document.getElementById("btn").onclick=function(){ var str=$('<script type="text/javascript" src="http://127.0.0.1:8080/testJsonp/test.jsp?name=fun">'); $(document).append(str);}
Server:jsp
<%String name=request.getParameter("name");String html="\'<div id=\"gg\" name=\"ggb\" style=\"color:red\">fdsfdsfd</div>\'";out.print(“$(document.body).append(”+html+“)”);//自动在body添加html%>
或者在html定义方法,在jsp调用方法,并传参
2.Ajax的Jsonp,自动解析json为js对象(底层还是通过script标签)
browser:html>jq
$.ajax("http://127.0.0.1:8080/testJsonp/test.jsp",{ dataType:'jsonp', jsonp:'funName', error:function(xhr,errMes,errObj){ alert(errMes); }, success:function(data){//jQuery18309719266761046812_1484988035397({name:'xiaoming',age:20}) alert(data.name); }});
Server:jsp
<%String name=request.getParameter("funName");name+="({name:\'xiaoming\',age:20})";out.print(name);%>
3.CORS简单请求
在想跨域的服务器中添加:
response.setHeader("Access-Control-Allow-Origin", "http://client1.tiglle.com");
参数一:固定Access-Control-Allow-Origin
参数二:允许跨域访问的域名,或者ip
多个用”,”分隔。”*”代表所有域都能跨域,不安全:
response.setHeader("Access-Control-Allow-Origin", "http://client1.tiglle.com,http://client2.tiglle.com");response.setHeader("Access-Control-Allow-Origin", "*");
4.CORS非简单请求
1.非简单请求会先请求发送OPTIONS请求验证
域a的jsp:
<script type="text/javascript"> function launch(){ $.ajax({ url:'http://server.tiglle.com/server/corsServlet', method:'post', beforeSend:function(xhr){ xhr.setRequestHeader("a","b"); }, success:function(){ console.log(arguments[0]); } }); } </script>
域b的服务器的servlet:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Access-Control-Allow-Origin", "http://client1.tiglle.com"); response.getWriter().print("haha,ok le"); } @Override protected void doOptions(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.addHeader("Access-Control-Allow-Origin", "*"); response.addHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,DELETE"); response.addHeader("Access-Control-Allow-Headers", "a,b"); }
三.通过nginx解决
页面地址和nginx监听地址一致,然后页面请求地址指向统一nginx,由nginx根据规则转发到不同服务器,然后通过nginx返回。
cors详见:http://www.ruanyifeng.com/blog/2016/04/cors.html
0 0
- 跨域的三种实现方式
- 实现 Java 平台的三种方式
- 实现 Java 平台的三种方式
- 实现 Java 平台的三种方式
- 自定义表单的三种方式实现
- 实现 Java 平台的三种方式
- 实现 Java 平台的三种方式
- hibernate 实现继承的三种方式
- 三种不同的接口实现方式
- 单例的三种实现方式
- 拦截器的三种实现方式!
- 三种方式实现视频的播放
- list排序的三种实现方式
- 栈的三种存储实现方式
- java线程的三种实现方式
- 实现Servlet的三种方式
- 分布式锁的三种实现方式
- JAVA多线程实现的三种方式
- 2017蓝桥杯省赛(方格分割+)
- yolo v2
- 180. Consecutive Numbers
- 30 min about LINQ
- (转)Android PopupWindow的使用技巧
- 跨域的三种实现方式
- qt使用
- 不要通过Application Object或者其他全局静态变量来存放数据
- 括号配对问题
- centos7关闭防火墙
- Qt资源整理
- 双线性插值算法的详细总结 .
- 【Leetcode】从排序数组中删除重复元素
- LeetCode