什么是跨域

**什么是跨域,如何实现跨域访问

1.1先聊聊什么是同源策略
规定:如果浏览器的地址与Ajax的请求地址协议名称://域名地址:端口号如果都相同则满足同源策略,浏览器可以正常的解析返回值;如果三者之间有一个不同,则违反了同源策略,浏览器就不会解析返回值
在这里插入图片描述
1.2什么是跨域
由于业务需要,通常A服务器中的数据可能来源于B服务器. 当浏览器通过网址解析页面时,如果页面内部发起ajax请求.如果浏览器的访问地址与Ajax访问地址不满足同源策略时,则称之为跨域请求.
跨域要素:
1.浏览器
2.解析ajax
3.违反了同源策略

2如何实现跨域访问 (JSONP)
2.1 JSONP跨域访问
2.1.1JSONP介绍
JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的
2.1.2JSON原理说明
1.它利用了javaScript中的src属性可以跨域访问。
在这里插入图片描述
2.提前准备一个回调函数callback()
/*定义回调函数 */
function hello(data){
alert(data.name);
}

3.将返回值结果运用特殊的格式封装。callback(JSON数据)
hello({“id”:“1”,“name”:“tom”})

2.2 JSONP高级API
2.2.1编辑前端WEB页面

JSONP测试

JSON跨域请求测试

2.2.2JSONP页面请求分析
在这里插入图片描述
2.2.3编辑后端服务器

package com.jt.web;

import com.fasterxml.jackson.databind.util.JSONPObject;
import com.jt.pojo.ItemDesc;
import com.jt.util.ObjectMapperUtil;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class WebJSONPController {

/**
 * 完成JSONP跨域访问
 * url地址: http://manage.jt.com/web/testJSONP?callback=hello&_=1605584709377
 * 参数:    callback 回调函数的名称
 * 返回值:  callback(json)
 */
@RequestMapping("/web/testJSONP")
public JSONPObject testJSONP(String callback){
    ItemDesc itemDesc = new ItemDesc();
    itemDesc.setItemId(1000L).setItemDesc("JSONP远程调用!!!");
    JSONPObject jsonpObject = new JSONPObject(callback, itemDesc);
    return jsonpObject;
}

}

JSONP测试完成!

3.CORS跨域实现
3.1CORS介绍
因为出于安全的考虑, 浏览器不允许Ajax调用当前源之外的资源. 即浏览器的同源策略.
CORS需要浏览器和服务器同时支持。目前,所有主流浏览器都支持该功能,IE浏览器不能低于IE10。在浏览器端, 整个CORS通信过程都是浏览器自动完成,在请求之中添加响应头信息,如果服务器允许执行跨域访问.,则浏览器的同源策略放行.
在这里插入图片描述
3.2跨域检验 (没有进行服务器配置之前)
说明: 由www.jt.com/test.html访问页面,之后内部由ajax发起请求. 得到如图的信息.信息中显示,几乎所有的浏览器都兼容CORS的方式,但是由于服务器不允许跨域,所以请求被拒.
在这里插入图片描述
3.3配置后端服务器

由于跨域需求其他的服务器也会需要跨域.所以在jt-common中添加跨域的配置
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;

/**

  • 完成CORS跨域配置: 实现思路在请求的响应头中添加访问信息.
    */
    @Configuration
    public class CORSConfig implements WebMvcConfigurer{//web项目的全局配置的接口.

    /**

    • 参数介绍:
    •  1.addMapping()  哪些请求可以进行跨域操作
      
    •    addMapping("/**")   表示所有访问后端的服务器的请求都允许跨域
      
    •    addMapping("/addUser/**")  表示部分请求可以跨域
      
    •    /*       只能拦截一级目录
      
    •    /**      可以拦截多级目录
      
    •  2.allowedOrigins("*")  允许哪些网站跨域
      
    •  3.allowCredentials(true)  请求跨域时是否允许携带Cookie/Session相关
      
    • @param registry
      /
      @Override
      public void addCorsMappings(CorsRegistry registry) {
      registry.addMapping("/**")
      .allowedOrigins("
      ")
      .allowCredentials(true);
      //.maxAge(); 默认30分钟 是否允许跨域请求 30分钟之内不会再次验证
      //.allowedMethods() 允许请求类型
      }
      }

3.4响应信息

在这里插入图片描述

4.跨域总结
1.什么叫跨域 浏览器解析Ajax时,发起url请求违反了同源策略时,称之为跨域.
2.什么时候用跨域 一般A服务器需要从B服务器中获取数据时,可以采用跨域的方式.
3.什么是JSONP JSONP是JSON的一种使用模式 利用javaScript中的src属性进行跨域请求.(2.自定义回调函数,3.将返回值进行特殊格式封装)
4.什么是CORS CORS是当前实现跨域的主流方式,现在所有的主流浏览器都支持,需要在服务器端配置是否允许跨域的配置. 只要配置了(在响应头中添加允许跨域的标识),则同源策略不生效,则可以实现跨域.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值