Web跨域问题

目录

一、引言

在web开发的过程中,因为前后端的分离我们经常会遇到跨域问题,从而导致前后端的数据无法互通,那么跨域问题究竟是什么,而他又如何解决呢?

二、跨域问题

1.同源策略

用户输入的URL中包含的协议、域名、端口都完全相同。如果有一项不同,浏览器就会觉得有安全风险。

2.跨域

跨域(CORS)是指不同域名之间相互访问。跨域,指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略所造成的,是浏览器对于JavaScript所定义的安全限制策略。

3.出现跨域问题的情况

  • 同一协议
  • 同一IP地址
  • 同一端口

以上三条中任一条件不满足就会出现跨域问题。

三、解决方案

跨域问题的解决方法针对不同的web项目有很多种,本文我们主要介绍普通web项目和spring boot项目的跨域问题如何解决。

1.普通web,使用Filter过滤器

使用Filter过滤器来过滤服务请求,向请求端设置Response Header(响应头部)的Access-Control-Allow-Origin属性声明允许跨域访问。

java 复制代码
@WebFilter("/*")
public class TestFilter implements Filter {
    public void init(FilterConfig config) throws ServletException {
    }

    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        HttpServletResponse res = (HttpServletResponse) response;
        res.setHeader("Access-Control-Allow-Origin", "*");
        res.setHeader("Access-Control-Allow-Methods", "*");
        res.setHeader("Access-Control-Max-Age", "3600");
        res.setHeader("Access-Control-Allow-Headers", "*");
        res.setHeader("Access-Control-Allow-Credentials", "true");
        chain.doFilter(request, response);
    }
}

2.SpringBoot项目,使用CrossOrigin注解

对于spring boot项目我们只需要在Controller上加上@CrossOrgin注解即可,也可以在需要跨域的接口上加上@CrossOrgin注解

java 复制代码
    @CrossOrigin
    @GetMapping("/test")
    public String test() {
        return "success";
    }

四、示例

我们先开启两个项目,这两个项目使用了不同的端口,在其中一个项目中访问另一个项目的接口,使用如下方法:

此时我们可以在浏览器中发现,在访问此接口的过程中出现了一个报错,并且没有访问到我们需要的那个接口。

当我们使用上述方法之后,再访问另一个项目中的端口,我们可以发现成功跨域了。

相关推荐
Java后端的Ai之路6 分钟前
【AIAgent开发】-Agent工具封装成CLI(纯干货!!!)
java·javascript·人工智能·agent·cli
薛定谔的猫-菜鸟程序员23 分钟前
Electron开发超详细教程(从入门到放弃)
前端·javascript·electron
AntsData35 分钟前
用 12K+ 条亚马逊评论信号,定位机械键盘下一版该改什么
java·大数据·计算机外设
code2cat42 分钟前
【随笔】连续批处理:长短请求怎样在迭代之间补位
java·人工智能·后端·大语言模型·vllm
最强小杰1 小时前
DeepSeek V4 Flash + Codex CLI 接入教程:原生 Responses API 适配,从配置到跑通收藏这篇就够了(2026)
java·前端·python·ai
Flynn Liang1 小时前
Spring AI 2.0 深度解析:ChatClient、Advisor 链与 MCP——Java 工程师的 AI 落地最优解
java·人工智能·spring·大模型·架构设计·spring ai
灿飞1 小时前
Kotlin与Java虚拟机六:基础与类型系统:一切皆对象,但对象有代价
java·kotlin
静水leo1 小时前
使用 Whistle 拦截接口并模拟后端响应
前端
计算机毕设定制辅导-无忧学长1 小时前
《基于微信小程序健康习惯激励系统设计与实现》
java·spring boot·mysql·微信小程序·uniapp·健康习惯激励系统
揽星河..1 小时前
【C语言】指针
c语言·开发语言