系统跨域:jsonp ; httpClient ;
一、介绍
1、跨域:在www.jt.com的网页上,访问manage.jt.com上的资源,
(跨域不是仅仅打开而是去操作另一个系统的资源)
2、原因:在不同的系统间(域名不同)程序调用时,违反了浏览器的协议,则不允许跨域访问---> 数据就不能获取
3、同域和跨域:
1)同域和跨域:
检测通信协议(http/https), 域名,端口,3者全部相同,才为同域
2)一级跨域 aaa.xxx.com-->bbb.xxx.com
二级跨域 xxx.aaa.com-->xxx.bbb.com
3、JSONP跨域
在JS-前端jsp,html中进行跨域访问的;
优点:减缓服务器的压力,把压力转给客服端的浏览器
JSONP调用原则:需要通过参数将方法名称进行传递
一般参数的名称固定为callback ;
如果采用JSONP的调用规则,需要将json数据通过函数名称包装,之后返回;
形式为 url?callback=函数名称(json数据)
4、举例实例
1)前端请求 manage.jt资源
alert("测试访问开始!!!!!") $.ajax({ url:"http://manage.jt.com/web/testJSONP", //定义远程访问路径 type:"get", //以get方式请求 dataType:"jsonp", //返回值的数据类型为jsonp jsonp: "callback", //指定参数名称 //指定回调函数名称 :后台需要按照约定进行封装,返回时格式为: hello(ItemCatResult的json形式) jsonpCallback: "hello", success:function (data){ alert(data.id); //转化为字符串使用 //var obj = eval("("+data+")"); //alert(obj.name); } }); |
注意:http://www.jt.com/JSONP.html 使用这种域名格式访问,而不要使用ip访问,例如localhost:8080
服务端返回:
request header: http://manage.jt.com/web/testJSONP?callback=hello&_=1223233555 |
2)后台的controller
@Controller public class JSONPController { @RequestMapping("/web/testJSONP") //@ResponseBody public void testJSON(String tomcat, HttpServletResponse response) throws IOException{ User user = new User(); user.setId(100); ObjectMapper objectMapper = new ObjectMapper(); String data = objectMapper.writeValueAsString(user); String json = hello+"("+data+")"; response.setContentType("text/html;charset=utf-8"); response.getWriter().write(json); System.out.println("JSON数据跨域请求成功!!!"); } } |
4、jsonp举例2
当采用jsonp调用时,
1)如果返回结果是string类型的json串,则必须进行对象转换,如下:
JSON.parse(获取的json串); 或 eval(json串)
2)如果返回的是对象格式,不需要进行对象转化,因为jsonp调用时返回对象后自动的转化js对象,使对象.属性能正确的调用
//url:http://sso.jt.com/user/query/" + _ticket@RequestMapping("/query/{ticket}")@ResponseBodypublic MappingJacksonValue findUserByTicket(@PathVariable String ticket,String callback){try { String userJSON = jedisCluster.get(ticket);if(!StringUtils.isEmpty(userJSON)){MappingJacksonValue jacksonValue = new MappingJacksonValue(SysResult.oK(userJSON));jacksonValue.setJsonpFunction(callback);return jacksonValue;}} catch (Exception e) {e.printStackTrace();}MappingJacksonValue jacksonValue = new MappingJacksonValue(SysResult.build(201,"查询失败"));jacksonValue.setJsonpFunction(callback);return jacksonValue;}
5、HttpClient跨域
说明:Java代码需要模拟http协议发出http请求,获取需要的数据,这样的方式叫做:HTTPClient ;
1)、jsop和httpClient的区别:
jsop的请求 是由浏览器解析JS发出的http请求 ;
httpclient是由Java代码模拟http协议发出的http请求 ;
2)具体实现:
CloseableHttpClient httpClient = HttpClients.createDefault(); String uri = "http://item.jd.com/806876.html"; HttpGet get = new HttpGet(uri); HttpPost httpPost = new HttpPost(uri); CloseableHttpResponse response =httpClient.execute(httpPost); //判断请求是否有效 if(response.getStatusLine().getStatusCode() == 200){ System.out.println("请求成功!!!"); System.out.println(EntityUtils.toString(response.getEntity())); } |
系统跨域:jsonp ; httpClient ;相关推荐
- 跨域 || Jsonp
同源策略 同源策略(Same-Origin Policy)最早由 Netscape 公司提出,是浏览器的一种安全策略. 同源: 协议.域名.端口号 必须完全相同.违背同源策略就是跨域. 如何 ...
- 【JS】AJAX跨域-JSONP解决方案(一)
[JS]AJAX跨域-JSONP解决方案(一) 参考文章: (1)[JS]AJAX跨域-JSONP解决方案(一) (2)https://www.cnblogs.com/h--d/p/11470534. ...
- ajax跨域jsonp并且post请求No 'Access-Control-Allow-Origin'以及执行error时readyState=4同时status=200的解决方法
ajax跨域jsonp并且post请求No 'Access-Control-Allow-Origin'以及执行error时readyState=4同时status=200的解决方法 [网上很多网友的回 ...
- AJAX | 跨域与JSONP + 同源策略和跨域 + JSONP + 防抖和节流 + 案例 – 淘宝搜索
目录 同源策略和跨域 同源策略 跨域 JSONP JSONP的实现原理 自己实现一个简单的JSONP JSONP的缺点 jQuery中的JSONP 自定义参数及回调函数名称 jQuery中JSONP的 ...
- [JS]笔记18_AJAX2_iframe元素AJAX跨域JSONP跨域
1.iframe元素 iframe元素会创建包含另外一个文档的内联框架 常用属性: frameborder属性规定是否显示框架周围的边框 值:0/1 src属性规定要显示的文档的URL 可是:html ...
- 跨域-(jsonp cors)
同源策略它是由NetScape提出的一个著名的安全策略. 浏览器执行js,会检查它属于哪个页面,如果不是同源页面,不会被执行. 由于浏览器的同源策略,只要发送请求url与页面地址有不同的即为跨域.只要 ...
- 帆软报表决策系统跨域登录
一般我们会将帆软系统通过iframe集成进来,会遇到两个问题,一个是登录,一个是跨域问题,比如我们需要预览一个模板文件: http://localhost:8075/webroot/decision/ ...
- python全栈开发103_python全栈开发day103-python垃圾回收机制、mro和c3算法解析、跨域jsonp\CORS、Content-Type组件...
Python垃圾回收 -- 引用计数 -- Python为每个对象维护一个引用计数 -- 当引用计数为0的 代表这个对象为垃圾 -- 标记清除 -- 解决孤立的循环引用 -- 标记根节点和可达对象 - ...
- centerajax同域跨域jsonp函数封装/center
function ajax(opt) {opt = opt || {}; // 对实参处理var xmlhttp, method, url, async, dataType, data;method ...
最新文章
- lt;xliff:ggt;标签
- eclipse git提交代码_来看看大厂的Git提交规范,千万别乱提交代码哦...
- php判断是否为数字_PHP将英文数字转换为阿拉伯数字
- winscp登陆windows服务器_基于OpenSSH+WinSCP完成Windows服务器之间的文件传输
- 绝非玩笑!人工智能或开创黑客新时代
- 关于物联网规则引擎技术,你想要知道的都在这儿!
- 【Kafka】 kafka集群升级导致broker.id发生变动变动引起的问题
- 宏杉科技的“存储七项式”方法论
- 解读Android12 CDD中针对隔离环境(TEE)的要求
- 数学建模最新教育数据分享及数据查询方法(数据来源:世界银行、世界数据图册、联合国教科文组织、国家统计局)
- 硬盘底座linux,ORICO推出全透明硬盘底座、移动硬盘盒
- Excel 怎么让行或列倒转过来?
- 服务器断电mysql文件丢失_服务器断电了怎么恢复数据?
- linux开源社区贡献代码,4岁小萝莉向Linux内核贡献代码修复「漏洞」而且代码已经合并到内核...
- 数字点播院线三级设备开发总结
- 在ReactJS中正确修改状态数组
- python计算召回率_分词结果准确率、召回率计算-python
- 新光大ArtPark9亮相 以“艺术”再造生活方式
- ghost64怎么装linux,使用ghost对linux进行系统备份
- java派生类属例子_“派生”类属与“相关”类属的辨析
热门文章
- alsa 音频编程简单的例子 (总结)
- 十个海量数据处理方法大总结
- linux python pyenv,在Centos中安装并使用Pyenv,一个强大的Python版本管理工具
- 一起撸个简单粗暴的Tv应用主界面的网格布局控件(下)
- 计算机理论学习之计算机简史
- Kotlin-简约之美-进阶篇(十):扩展函数和扩展属性
- [RK3288][Android6.0] 调试笔记 --- GPU DVFS的控制开关
- 分步傅里叶算法_分布快速傅里叶算法,split-step fast fourier transformed,音标,读音,翻译,英文例句,英语词典...
- Java——基础知识
- Fastcopy介绍