java跨域原理_跨域的实现

跨域访问测试

同域测试

分析

结论

当浏览器地址与ajax请求的地址(协议://域名:端口)相同时可以实现正常的义务调用.

跨域测试

分析

结论

如果请求地址(协议://域名:端口)不相同则导致请求调用失败

浏览器-同源策略说明

说明:浏览器规定发起ajax请求时如果请求协议/域名/端口号如果三种中有一个与当前浏览器的地址不相同时,则违反了同源策略的规定,则浏览器不予以解析返回值.

跨域问题:违反同源策略的规定就是跨域请求.

跨域-JSONP

JSONP垮域原理

1.利用javascrpit中的src属性实现跨域请求.

2.自定义回调函数 function callback(xxx).

3.将返回值结果进行特殊格式封装 callback(json).

4.由于利用src属性进行调用 所以只支持get请求类型

封装返回值hello({"id":"1","name":"tom"})

页面js编辑

JSONP测试

$(function(){

alert("测试访问开始!!!!!")

$.ajax({

url:"http://manage.jt.com/web/testJSONP",

type:"get", //jsonp只能支持get请求

dataType:"jsonp", //dataType表示返回值类型

jsonp: "callback", //指定参数名称

jsonpCallback: "hello", //指定回调函数名称

success:function (data){ //data经过jQuery封装返回就是json串

console.log(data);

}

});

})

JSON跨域请求测试

JSONP

JSONP(JSON with Padding)是JSON的一种使用模式,可用于解决主流浏览器的跨域数据访问问题.由于同源策略,一般来说位于 server1.example.com的网页无法与不是 server1.example.com的服务器进行沟通.

JSONP优化.

JSONP测试

$(function(){

alert("测试访问开始!!!!!")

$.ajax({

url:"http://manage.jt.com/web/testJSONP",

type:"get", //jsonp只能支持get请求

dataType:"jsonp", //dataType表示返回值类型

jsonp: "callback", //指定参数名称

jsonpCallback: "hello", //指定回调函数名称

success:function (data){ //data经过jQuery封装返回就是json串

console.log(data);

}

});

})

JSON跨域请求测试

编辑后端Controllerpackage com.jt.web.controller;

import com.jt.pojo.ItemDesc;

import com.jt.util.ObjectMapperUtil;

import jdk.nashorn.internal.runtime.regexp.JoniRegExp;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class JSONPController {

/**

* 实现JSONP跨域请求

* url地址: http://manage.jt.com/web/testJSONP?callback=xxxxxx

* 参数: 暂时没有可以不接

* 返回值: callback(JSON);

*/

@RequestMapping("/web/testJSONP")

public String testJSONP(String callback){

ItemDesc itemDesc = new ItemDesc();

itemDesc.setItemId(1000L).setItemDesc("JSONP测试!!!");

String json = ObjectMapperUtil.toJSON(itemDesc);

return callback+"("+json+")";

}

}

控制台输出

9bee921ac75b2911bd13288d22a13785.png

JSONPObject说明@RequestMapping("/web/testJSONP")

public JSONPObject testJSONP(String callback){

ItemDesc itemDesc = new ItemDesc();

itemDesc.setItemId(1000L).setItemDesc("JSONP测试!!!");

return new JSONPObject(callback, itemDesc);

}

cors跨域方式

cors调用原理

5278430090b49c63fcc7f97076c06a67.png

实现cors调用package com.jt.config;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.CorsRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration //标识我是一个配置类

public class CorsConfig implements WebMvcConfigurer {

//在后端 配置cors允许访问的策略

@Override

public void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/**")

.allowedMethods("GET","POST") //定义允许跨域的请求类型

.allowedOrigins("*") //任意网址都可以访问

.allowCredentials(true) //是否允许携带cookie

.maxAge(1800); //设定请求长链接超时时间.

}

}

cors调用响应头解析

478411470ec03c3cf22cd069a2b784e7.png

cors跨域测试

fe4afdca2ee539b2bf222541b79e92ef.png

JSON数据格式

c6fd5a4497fdf67e0e55a0b0d5c879b2.png

关于跨域的总结

1.jsonp

jsonp本质利用javaScript中的src属性的get请求实现的跨域

返回值必须经过特殊格式封装

2.cors

添加在响应头中的信息,指定在那些服务器中访问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值