一、介绍

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 ;相关推荐

  1. 跨域 || Jsonp

    ​​​​​同源策略 同源策略(Same-Origin Policy)最早由 Netscape 公司提出,是浏览器的一种安全策略. 同源: 协议.域名.端口号 必须完全相同.违背同源策略就是跨域. 如何 ...

  2. 【JS】AJAX跨域-JSONP解决方案(一)

    [JS]AJAX跨域-JSONP解决方案(一) 参考文章: (1)[JS]AJAX跨域-JSONP解决方案(一) (2)https://www.cnblogs.com/h--d/p/11470534. ...

  3. 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的解决方法 [网上很多网友的回 ...

  4. AJAX | 跨域与JSONP + 同源策略和跨域 + JSONP + 防抖和节流 + 案例 – 淘宝搜索

    目录 同源策略和跨域 同源策略 跨域 JSONP JSONP的实现原理 自己实现一个简单的JSONP JSONP的缺点 jQuery中的JSONP 自定义参数及回调函数名称 jQuery中JSONP的 ...

  5. [JS]笔记18_AJAX2_iframe元素AJAX跨域JSONP跨域

    1.iframe元素 iframe元素会创建包含另外一个文档的内联框架 常用属性: frameborder属性规定是否显示框架周围的边框 值:0/1 src属性规定要显示的文档的URL 可是:html ...

  6. 跨域-(jsonp cors)

    同源策略它是由NetScape提出的一个著名的安全策略. 浏览器执行js,会检查它属于哪个页面,如果不是同源页面,不会被执行. 由于浏览器的同源策略,只要发送请求url与页面地址有不同的即为跨域.只要 ...

  7. 帆软报表决策系统跨域登录

    一般我们会将帆软系统通过iframe集成进来,会遇到两个问题,一个是登录,一个是跨域问题,比如我们需要预览一个模板文件: http://localhost:8075/webroot/decision/ ...

  8. python全栈开发103_python全栈开发day103-python垃圾回收机制、mro和c3算法解析、跨域jsonp\CORS、Content-Type组件...

    Python垃圾回收 -- 引用计数 -- Python为每个对象维护一个引用计数 -- 当引用计数为0的 代表这个对象为垃圾 -- 标记清除 -- 解决孤立的循环引用 -- 标记根节点和可达对象 - ...

  9. centerajax同域跨域jsonp函数封装/center

    function ajax(opt) {opt = opt || {}; // 对实参处理var xmlhttp, method, url, async, dataType, data;method ...

最新文章

  1. lt;xliff:ggt;标签
  2. eclipse git提交代码_来看看大厂的Git提交规范,千万别乱提交代码哦...
  3. php判断是否为数字_PHP将英文数字转换为阿拉伯数字
  4. winscp登陆windows服务器_基于OpenSSH+WinSCP完成Windows服务器之间的文件传输
  5. 绝非玩笑!人工智能或开创黑客新时代
  6. 关于物联网规则引擎技术,你想要知道的都在这儿!
  7. 【Kafka】 kafka集群升级导致broker.id发生变动变动引起的问题
  8. 宏杉科技的“存储七项式”方法论
  9. 解读Android12 CDD中针对隔离环境(TEE)的要求
  10. 数学建模最新教育数据分享及数据查询方法(数据来源:世界银行、世界数据图册、联合国教科文组织、国家统计局)
  11. 硬盘底座linux,ORICO推出全透明硬盘底座、移动硬盘盒
  12. Excel 怎么让行或列倒转过来?
  13. 服务器断电mysql文件丢失_服务器断电了怎么恢复数据?
  14. linux开源社区贡献代码,4岁小萝莉向Linux内核贡献代码修复「漏洞」而且代码已经合并到内核...
  15. 数字点播院线三级设备开发总结
  16. 在ReactJS中正确修改状态数组
  17. python计算召回率_分词结果准确率、召回率计算-python
  18. 新光大ArtPark9亮相 以“艺术”再造生活方式
  19. ghost64怎么装linux,使用ghost对linux进行系统备份
  20. java派生类属例子_“派生”类属与“相关”类属的辨析

热门文章

  1. alsa 音频编程简单的例子 (总结)
  2. 十个海量数据处理方法大总结
  3. linux python pyenv,在Centos中安装并使用Pyenv,一个强大的Python版本管理工具
  4. 一起撸个简单粗暴的Tv应用主界面的网格布局控件(下)
  5. 计算机理论学习之计算机简史
  6. Kotlin-简约之美-进阶篇(十):扩展函数和扩展属性
  7. [RK3288][Android6.0] 调试笔记 --- GPU DVFS的控制开关
  8. 分步傅里叶算法_分布快速傅里叶算法,split-step fast fourier transformed,音标,读音,翻译,英文例句,英语词典...
  9. Java——基础知识
  10. Fastcopy介绍