如何解决从null域访问'http:xxxx.comxxx'的XMLHttpRequest被阻止的跨域问题?

2026-05-20 22:341阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计728个文字,预计阅读时间需要3分钟。

如何解决从null域访问'http://xxxx.com/xxx'的XMLHttpRequest被阻止的跨域问题?

错误描述:项目中写入了一个上传图片的接口;他人使用时出现错误,具体分析如下:原本是跨域错误,即跨域请求。Ajax调用接口出现:Access to XMLHttpRequest at 'http://xxxx.com/xxx' from origin 'http://xxx' has been blocked by CORS policy。

错误描述:项目中写了一个上传图片的接口;给到别人使用出现这个错误,具体分析原来是跨域报错;

ajax调用接口出现:Access to XMLHttpRequest at ‘​​xxxx.com/xxx’​​ from origin ‘​​localhost:3000​​’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. 这是一个跨域请求报错。 跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。 同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域。​

当前url

被请求url

是否跨域

说明

​​www.aaa.com​​

​​www.aaa.com.test.jsp​​

同源(协议、域名、端口号相同)

​​www.aaa.com​​

​​www.aaa.com.test.jsp​​

如何解决从null域访问'http://xxxx.com/xxx'的XMLHttpRequest被阻止的跨域问题?

不同源(协议不相同)

​​www.aaa.com​​

​​www.baidu.com.test.jsp​​

不同源(主域名不相同)

​​www.aaa.com​​

​​a.aaa.com.test.jsp​​

不同源(子域名不相同)

​​www.aaa.com:8080​​

​​aaa.com:8081​​

不同源(端口号不相同)

ajax请求页面页面地址与Ajax所在页面地址不同源导致;

导致请求报错有三种原因:

  • 请求响应URL不同源;
  • 请求类型是xhr请求,也就是Ajax请求;
  • 浏览器的同源策略;
  • 同时满足以上三种原因会出现跨域问题。

    在另一个项目中模拟跨域请求,相关ajax代码:

    var data = {"filename":"test","filepath":"D://a"}$.ajax({ type : "post", url : "localhost:8080/uploadImg/", contentType : 'application/json;charset=UTF-8', data : JSON.stringify(data), dataType:'json', success : function(date) { alert(date); }});

    解决方法:​

    由于我写的是Java后端接口给别人访问所以只能在后端解决,解决思路使用过滤器,就是在响应的首部信息中加入需要的首部信息字段,有两种解决方法

    第一种方法:自定义一个过滤器

    package util;import javax.servlet.*;import javax.servlet.test.com", maxAge = 3600)//指定源 @RequestMapping("/nowTime") public String nowTime(HttpServletRequest request, HttpServletResponse response){ String nowTime = sysUserService.getNowTime(); System.out.println(nowTime); return nowTime; }}

    如果你有使用spring Security,在spring安全级别启用Cros,并允许它利用Spring MVC级别定义的配置;

    @EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.cors().and()... }

    ​​@CrossOrgin​​不起作用原因:

    springMVC版本要在4.2以上;

    有可能是请求格式问题,没有得到预期的响应;

    在@RequestMapping指定get或者post请求;

    @RequestMapping(value = "/nowTime" ,method = RequestMethod.POST)

    本文共计728个文字,预计阅读时间需要3分钟。

    如何解决从null域访问'http://xxxx.com/xxx'的XMLHttpRequest被阻止的跨域问题?

    错误描述:项目中写入了一个上传图片的接口;他人使用时出现错误,具体分析如下:原本是跨域错误,即跨域请求。Ajax调用接口出现:Access to XMLHttpRequest at 'http://xxxx.com/xxx' from origin 'http://xxx' has been blocked by CORS policy。

    错误描述:项目中写了一个上传图片的接口;给到别人使用出现这个错误,具体分析原来是跨域报错;

    ajax调用接口出现:Access to XMLHttpRequest at ‘​​xxxx.com/xxx’​​ from origin ‘​​localhost:3000​​’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. 这是一个跨域请求报错。 跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。 同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域。​

    当前url

    被请求url

    是否跨域

    说明

    ​​www.aaa.com​​

    ​​www.aaa.com.test.jsp​​

    同源(协议、域名、端口号相同)

    ​​www.aaa.com​​

    ​​www.aaa.com.test.jsp​​

    如何解决从null域访问'http://xxxx.com/xxx'的XMLHttpRequest被阻止的跨域问题?

    不同源(协议不相同)

    ​​www.aaa.com​​

    ​​www.baidu.com.test.jsp​​

    不同源(主域名不相同)

    ​​www.aaa.com​​

    ​​a.aaa.com.test.jsp​​

    不同源(子域名不相同)

    ​​www.aaa.com:8080​​

    ​​aaa.com:8081​​

    不同源(端口号不相同)

    ajax请求页面页面地址与Ajax所在页面地址不同源导致;

    导致请求报错有三种原因:

  • 请求响应URL不同源;
  • 请求类型是xhr请求,也就是Ajax请求;
  • 浏览器的同源策略;
  • 同时满足以上三种原因会出现跨域问题。

    在另一个项目中模拟跨域请求,相关ajax代码:

    var data = {"filename":"test","filepath":"D://a"}$.ajax({ type : "post", url : "localhost:8080/uploadImg/", contentType : 'application/json;charset=UTF-8', data : JSON.stringify(data), dataType:'json', success : function(date) { alert(date); }});

    解决方法:​

    由于我写的是Java后端接口给别人访问所以只能在后端解决,解决思路使用过滤器,就是在响应的首部信息中加入需要的首部信息字段,有两种解决方法

    第一种方法:自定义一个过滤器

    package util;import javax.servlet.*;import javax.servlet.test.com", maxAge = 3600)//指定源 @RequestMapping("/nowTime") public String nowTime(HttpServletRequest request, HttpServletResponse response){ String nowTime = sysUserService.getNowTime(); System.out.println(nowTime); return nowTime; }}

    如果你有使用spring Security,在spring安全级别启用Cros,并允许它利用Spring MVC级别定义的配置;

    @EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.cors().and()... }

    ​​@CrossOrgin​​不起作用原因:

    springMVC版本要在4.2以上;

    有可能是请求格式问题,没有得到预期的响应;

    在@RequestMapping指定get或者post请求;

    @RequestMapping(value = "/nowTime" ,method = RequestMethod.POST)