当前位置: 首页 > news >正文

跨域的解决方案

文章目录

  • 概念
    • 一、什么是跨域问题
    • 二、为什么会发生跨域问题
    • 三、跨域解决方案
      • 1、JSONP
      • 2、添加响应头
      • 3、Spring注解@CrossOrigin
      • 4、配置文件(常用)
      • 5、nginx跨域

概念

一、什么是跨域问题

前端调用的后端接口不属于同一个域(域名或端口不同),就会产生跨域问题,也就是说你的应用访问了该应用域名或端口之外的域名或端口。

通俗的说:当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域

在这里插入图片描述

二、为什么会发生跨域问题

出于浏览器的同源策略限制。

同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。

三、跨域解决方案

1、JSONP

  • 实现原理JSONP请求的类型是JavaScript脚本(callback 作为前后端的约定,callback的值做为方法名,json内容作为方法的参数),而XHR请求的类型是json类型。

  • JSONP 的缺点

    1、只支持 GET 方法请求,不管 AJAX 中实际的请求方法是不是 GET

    2、服务端还需要修改代码

    3、发送的不是 XHR 请求,无法使用 XHR 对象(但这也是为什么可以解决跨域问题的根本)

    总之,并不推荐使用 JSONP 方式来解决跨域问题。

2、添加响应头

​ 在controller方法中,写响应头信息。

​ response.addHeader(“Access-Control-Allow-Origin”,“http://127.0.0.1:8082”);

3、Spring注解@CrossOrigin

在controller方法上添加注解

@CrossOrigin(origins = {“http://127.0.0.1:8082”})

4、配置文件(常用)

package com.linjiu.demo.config;import org.springframework.stereotype.Component;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@Component
public class HttpFilter implements Filter {/***CROS跨域常用headerAccess-Control-Allow-Origin: 允许哪些ip或域名可以跨域访问Access-Control-Max-Age: 表示在多少秒之内不需要重复校验该请求的跨域访问权限Access-Control-Allow-Methods: 表示允许跨域请求的HTTP方法,如:GET,POST,PUT,DELETEAccess-Control-Allow-Headers: 表示访问请求中允许携带哪些Header信息,如:Accept、Accept-Language、Content-Language、Content-Type*/@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//*号表示对所有请求都允许跨域访问HttpServletResponse res = (HttpServletResponse) response;res.addHeader("Access-Control-Allow-Credentials", "true");res.addHeader("Access-Control-Allow-Origin", "*");res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");if (((HttpServletRequest) request).getMethod().equals("OPTIONS")) {response.getWriter().println("Success");return;}chain.doFilter(request, response);}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void destroy() {}
}

5、nginx跨域

一般解决的是前端静态页面在不同服务器之间的访问。

# 在server下添加配置文件#允许跨域请求的域,* 代表所有add_header 'Access-Control-Allow-Origin' *;#允许带上cookie请求add_header 'Access-Control-Allow-Credentials' 'true';#允许请求的方法,比如 GET/POST/PUT/DELETEadd_header 'Access-Control-Allow-Methods' *;#允许请求的headeradd_header 'Access-Control-Allow-Headers' *;

在这里插入图片描述

http://www.lryc.cn/news/175827.html

相关文章:

  • 如何使用Java语言判断出geek是字符串参数类型,888是整数参数类型,[hello,world]是数组参数类型,2.5是双精度浮点数类型?
  • 9.20华为机试-后端
  • LC926. 将字符串翻转到单调递增(JAVA - 动态规划)
  • 【高阶数据结构】哈希的应用 {位图;std::bitset;位图的应用;布隆过滤器;布隆过滤器的应用}
  • 金融生产存储亚健康治理:升级亚健康 3.0 ,应对万盘规模的挑战
  • C语言自定义类型讲解:结构体,枚举,联合(2)
  • AI编程助手 Amazon CodeWhisperer 全面解析与实践
  • 利用EXCEL进行XXE攻击
  • 芯片验证就是一次旅行
  • Java深入理解线程的三大特性
  • 2025快手校招面试真题汇总及其解答(二)
  • PHP生成带中文的图片
  • java框架-Dubbo
  • Vue+iview 组件中通过v-for循环动态生成form表单进行表单校验
  • sns.load_dataset(“iris“)报错原因探究+解决办法
  • python回文素数
  • 纽扣电池16CRF1700.15,16CFR1700.20,ANSI C18.3M如何申请?
  • 10.12广州见 | 第十六届智慧城市大会报名通道全面开启
  • 2023-油猴(Tampermonkey)脚本推荐
  • 某度sign参数逆向
  • 【选型】JAVA生成PPT及选型
  • LPA*算法图文详解
  • 【Unity的HDRP渲染管线下实现好用的GUI模糊和外描边流光效果_Blur_OutLine_案例分享(内附源码)】
  • 电脑D盘格式化会有什么影响?电脑D盘格式化了怎么恢复数据
  • 【Spring】多环境切换
  • python经典百题之求10000之内的素数
  • ROS2 从头开始:第 5 部分 - 并发、执行器和回调组
  • 笔试强训Day3
  • 软考软件设计师-存储管理-文件管理-计算机网络(中
  • Vue3的学习