跨域资源共享CORS与JSONP
2018-06-18 02:00:20来源:未知 阅读 ()
同源策略限制:
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果没有同源策略,攻击者可以通过JavaScript获取你的邮件以及其他敏感信息,比如说阅读私密邮件,发送虚假邮件,查看聊天记录等等。所谓同源是指,协议,域名,端口相同。三者只有有一个不相同,就认为不同源!
JSONP:
JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。
原理:含有src属性的标签都可以跨域,如img、script、iframe!
本质:只是执行了javascript脚本!
简单来说,就是在客户端声明回调函数之后,客户端通过script标签向服务器跨域请求数据,然后服务端返回相应的数据并动态执行回调函数(返回带数据参数的回调函数的字符串,在客户端刚好被动态执行了!)。
jQuery中对JSONP的实现:
jQuery中提供了两个方法来实现:$.getJSON()和$.ajax(),常用的是底层的$.ajax()方法!
1.$.getJSON():
$.getJSON(url?jsoncallback=?,data,fn(data){…})
关键点:在url后带上参数jsoncallback=?,后台返回随机命名的callback函数!会被Jquery自动替换成回调方法的名称!
1 <script type="text/javascript"> 2 $.getJSON("http://localhost:3856/GetItemCates.ashx/GetItemCats?gateid=20&format=json&jsoncallback=?", function (data) { 3 var myprops = data.itemcats_get_response.item_cats.item_cat; 4 $.each(myprops, function (index, item) { $("ul").append("<li>" + item.name + "," + item.cid + "</li>") }); 5 } 6 7 ); 8 </script>
2. $.ajax():
$.ajax({
url: url,
data: data,
dataType : “jsonp”,
jsonp: “jsoncallback”,
jsonpCallback:”success_jsonpCallback”,
success: callback
});
1 $.ajax({ 2 type : "get", //jquey是不支持post方式跨域的 3 async:false, 4 url :"http://api.taobao.com/apitools/ajax_props.do", //跨域请求的URL 5 dataType : "jsonp",//传递给请求处理程序,用以获得jsonp回调函数名的参数名(默认为:callback) 6 jsonp: "jsoncallback", //自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名 7 jsonpCallback:"success_jsonpCallback",//成功获取跨域服务器上的json数据后,会动态执行这个callback函数 8 success : function(json){ 9 alert(json); 10 } 11 });
以上的jsonp和jsonpCallback可以自定义回调函数名和参数名!
注意:
- 需要服务器端的支持才行。
- 只支持get请求
CORS跨域资源共享(真正跨域)
跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。 CORS就是为了让AJAX可以实现可控的跨域访问而生的
CORS与JSONP相比:
- JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。
- 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
- JSONP主要被老的浏览器支持,但它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS
参考:AJAX跨域请求和CORS跨域资源共享
在webapp/WEB-INF/web.xml下配置:
1 <filter> 2 <filter-name>CorsFilter</filter-name> 3 <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 4 <init-param> 5 <param-name>cors.allowed.methods</param-name> 6 <param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value> 7 </init-param> 8 <init-param> 9 <param-name>cors.allowed.headers</param-name> 10 <param-value>Access-Control-Allow-Origin,Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,deviceName,deviceID,gctk,eptk,customerNo,userID</param-value> 11 </init-param> 12 <async-supported>true</async-supported> 13 </filter> 14 <filter-mapping> 15 <filter-name>CorsFilter</filter-name> 16 <url-pattern>/*</url-pattern> 17 </filter-mapping>
注:<async-supported>true</async-supported>是Servlet3.0新特性的异步处理标签
Servlet 线程不再是一直处于阻塞状态以等待业务逻辑的处理,而是启动异步线程之后可以立即返回
传送门:Servlet 3.0 新特性详解
连接:
跨域资源共享(CORS)问题解决方案
spring boot的方案
CORS 跨域 实现思路及相关解决方案
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:1.开发准备
- Springboot CORS跨域访问 2020-03-31
- Springboot vue 前后分离 跨域 Activiti6 工作流 集成代码生 2020-03-02
- 前后端分离之 跨域和JWT 2019-12-25
- 前后端分离开发与跨域问题 2019-12-22
- SpringMvc 跨域处理 2019-12-15
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash