【跨域问题】Access to XMLHttpRequest at ‘http://xxxx.com/xxx’ from origin ‘null’ has been blocked by

2023-05-16

错误描述:项目中写了一个上传图片的接口;给到别人使用出现这个错误,具体分析原来是跨域报错;
在这里插入图片描述ajax调用接口出现:Access to XMLHttpRequest at ‘http://xxxx.com/xxx’ from origin ‘http://localhost:3000’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
这是一个跨域请求报错。
跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域。

当前url被请求url是否跨域说明
http://www.aaa.comhttp://www.aaa.com.test.jsp同源(协议、域名、端口号相同)
http://www.aaa.comhttps://www.aaa.com.test.jsp不同源(协议不相同)
http://www.aaa.comhttp://www.baidu.com.test.jsp不同源(主域名不相同)
http://www.aaa.comhttp://a.aaa.com.test.jsp不同源(子域名不相同)
http://www.aaa.com:8080http://aaa.com:8081不同源(端口号不相同)

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

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

  1. 请求响应URL不同源;
  2. 请求类型是xhr请求,也就是Ajax请求;
  3. 浏览器的同源策略;

同时满足以上三种原因会出现跨域问题。

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

var data = {"filename":"test","filepath":"D://a"}
$.ajax({
    type : "post",
    url : "http://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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CROSFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;
        String origin = request.getHeader("origin");
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        filterChain.doFilter(req, res);
    }

    @Override
    public void destroy() {

    }
}

对应接口进行处理:

<!--跨域访问过滤器-->
  <filter>
    <filter-name>crosFilter</filter-name>
    <filter-class>util.CROSFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>crosFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>charsetEncoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

第二种方法:@CrossOrigin 注解
@CrossOrigin 应用在方法上,默认情况下,@CrossOrigin允许在@RequestMapping注解中指定的所有源和HTTP方法;

@Controller
@RequestMapping("/user")
public class SysUserController {

    @CrossOrigin(origins = "http://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级别定义的配置;

@EnableWebSecurity
public 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)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【跨域问题】Access to XMLHttpRequest at ‘http://xxxx.com/xxx’ from origin ‘null’ has been blocked by 的相关文章

  • HTTP实时音频流服务器

    作为概念验证 我需要创建一个 HTTP 服务器 该服务器在 GET 请求时应启动连续的非编码 非压缩音频数据流 WAV PCM16 我们假设音频数据是 4096 个随机生成的单声道音频样本块 采样率为 44 1kHz 我应该在 HTTP 响
  • Apache HTTP localhost 在 macOS Monterey 上随机花费 5 秒,但在 HTTPS 上速度很快

    我尽可能地等待 但最终不得不从莫哈韦升级 我知道有些东西会不必要地损坏 当然确实如此 较大的文件 超过 100k 随机需要 5 秒才能加载 它并不总是相同的文件 也不是每次都相同 并且它只发生在 HTTP Apache 中 尝试过端口 80
  • 将 HRESULT 转换为可读消息

    任何人都可以提供一些有关如何以编程方式翻译 HRESULT 的信息 http en wikipedia org wiki HRESULT http en wikipedia org wiki HRESULT 值到人类可读的消息 我知道实用程
  • .htaccess 路由到服务器上的子目录?性能/加载时间

    我想知道是否可以使用 htaccess 文件将我的域直接路由到服务器上的子目录 我从常规虚拟主机提供商处购买了虚拟主机软件包 其中我的domain com 连接到我的服务器的根目录 我想知道是否可以以某种方式将 htaccess 文件上传到
  • 我首次设置 AWS EB 时创建的默认安全组是什么?

    我对几个组所扮演的角色感到困惑 这些组似乎已自动添加到我的 AWS 安全组列表中 并以我收集的默认配置进行连接 并且想知道它们是如何工作的 以及它们的安全性如何 改变 具体来说 有三个神秘之处 launch wizard 1其中有一条入站规
  • 身份验证中的随机数使用

    在基于摘要的身份验证中 随机数由服务器生成 然而 在基于 OAuth 的身份验证中 随机数是由客户端生成的 我想知道是否有人知道差异的原因 随机数用于使请求唯一 在没有随机数的身份验证方案中 恶意客户端可以生成一次请求并重放多次 即使计算成
  • 如何在C++中使用Curl获取HTTP响应字符串

    我对 HTTP 命令和 libcurl 库非常陌生 我知道如何获取 HTTP 响应代码 但不知道如何获取 HTTP 响应字符串 以下是我为获取响应代码而编写的代码片段 任何有关如何获取响应字符串的帮助将不胜感激 curl easy seto
  • Angular4如何使用flatMap链接forkJoin

    我所处的情况是 我需要进行 5 个可以并行执行的 http 调用 在这五个调用之后需要执行另一个 http 调用 我在前 5 个中使用了 forkJoin 但我不知道如何链接 flatMap 或其他函数 forkJoin firstObse
  • org.apache.http 软件包在 API 级别 23 中被删除。替代方案是什么?

    在更新到最新的 android API 级别 23 Marshmallow 后 通过 build gradle 添加以下更改后 所有 org apache http 类都不起作用 android compileSdkVersion 23 b
  • C#4做COM的时候需要调用Marshal.ReleaseComObject吗?

    我有 VS2010 并向我的项目添加了对 COM 库的引用 并且 VS 在项目中嵌入了主要互操作 如果我引用COM库中的对象并且我想快速处理它们而不等待GC 是否需要调用ReleaseComObject Marshal ReleaseCom
  • COM 互操作注册

    我有一个正在暴露的 NET 程序集COM http en wikipedia org wiki Component Object Model 该程序集有两个公共接口和一个公共类 当我构建程序集时 我收到此警告 AssemblyName dl
  • WinApi:获取 COM 表单的控件名称

    我想用 Net 框架替换我当前的 UI 自动化工具 QTP 我需要测试 VB6 COM 应用程序 框架的基础之一是使用表单名称 到目前为止 我未能找到使用 Win API 获取这些数据的方法 该解决方案只有一个约束 即该解决方案必须依赖 N
  • Django 响应总是用 text/html 分块无法设置内容长度

    在我的Django应用程序的views py中 我在尝试设置以下HTTP标头字段后返回一个HttpResponse对象 Create a Response Object with the content to return response
  • 当会话令牌无效时,我应该使用什么状态代码?

    创建 Web 服务 RESTful 时 当会话令牌无效时我应该使用什么状态代码 目前我公司的人给我发了一个404 未找到 但我认为这是不正确的 因为资源存在 也许我应该使用 401 Unauthorized 你怎么认为 您建议我在这种情况下
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 多个客户端如何同时连接到服务器上的一个端口(例如 80)? [复制]

    这个问题在这里已经有答案了 我了解端口工作原理的基础知识 但是 我不明白的是多个客户端如何同时连接到端口 80 我知道每个客户端都有一个唯一的 对于他们的机器 端口 服务器是否从可用端口回复客户端 并简单地声明回复来自 80 这是如何运作的
  • 使用什么 API 在现有 MFC 应用程序中添加 HTTP 客户端支持?

    我最近接到一项任务 要添加与以下内容交互的能力网络地图服务 http en wikipedia org wiki Web Map Service到现有的 MFC 应用程序 我需要客户端 HTTP API 根据我的研究 领先的候选人似乎是CA
  • 对于多重继承,使用隐式转换而不是 QueryInterface() 是否合法?

    假设我有一个类实现两个或多个 COM 接口 正如here https stackoverflow com questions 1742848 why exactly do i need an explicit upcast when imp
  • 编写每个处理程序中间件

    我希望从处理程序中提取一些重复的逻辑 并将其放入一些每个处理程序的中间件中 特别是 CSRF 检查 检查现有会话值 即身份验证或预览页面 等 我读了关于此的几篇文章 http justinas org writing http middle
  • 为什么 websocket 需要使用 HTTP 进行打开握手?为什么不能成为一个独立的协议呢?

    Websocket 的设计方式是 通过使其握手成为有效的 HTTP 升级请求 其服务器可以与 HTTP 服务器共享端口 我对这个设计理念存有疑问 无论如何 WebSocket 协议都是一个独立的基于 TCP 的协议 为什么我们需要这个 HT

随机推荐

  • MyBatisMapper代理开发中,如何将Mapper接口和sql映射文件放置在同一目录下

    1 前言 1 1 环境准备 创建一个maven工程并导入mybatis坐标及mysql驱动坐标在java目录下创建Mapper接口在resouces目录下创建配置文件和sql映射文件 1 2 正常思维 如何将Mapper接口和sql映射文件
  • MyBatis Mapper代理开发

    文章目录 1 数据库准备2 创建一个maven项目 xff0c 导入mysql驱动坐标和mybatis坐标3 在resources目录下创建配置文件4 在resources目录下创建sql映射文件5 定义mapper接口6 修改配置文件中s
  • spring开启事务

    文章目录 1 概述2 环境准备2 1 spring整合mybatis2 2 添加dao service 在service方法中调用dao方法实现转账效果 2 3 数据库准备 3 不开启事务实现转账3 1 创建测试类 Demo 3 2 运行结
  • spring事务管理原理

    1 环境准备 spring如何开启事务 2 原理 在上面链接文章中吗 xff0c 我们通过A向B转账500在不开启事务情况下 xff0c reduceMoney方法和addMoney分别开启2个不同的事务 xff0c 因此在发生异常后会出现
  • spring事务相关配置之propagation

    文章目录 1 概述2 环境准备2 1 spring整合mybatis2 2 数据库准备2 2 1 account表2 2 2 log表 2 3 创建dao service并开启spring事务2 3 1 AccountDao2 3 2 Lo
  • spring事务相关配置之rollback

    文章目录 1 概述2 环境准备3 使用 96 rollbackFor 96 1 概述 我们知道当开启spring事务后 xff0c 如果出现异常 xff0c 那么数据库数据会进行回滚 但是并不是所有异常都会回滚因此我们可以使用rollbac
  • ios 音频录音、上传至7牛、播放及其与android兼容的问题

    iOS录音使用AVAudioRecorder xff0c 播放用 AVPlayer 就可以很好的解决 xff0c 网上也有很多的教程 这里就不细讲 xff0c 后面会附上代码 先说一下demo内容 xff0c 现在项目要求做一个录音 上传
  • 数据库

    1 查询选修1号课程的学生学号和成绩 xff0c 并要求对查询结果按成绩的降序排列 xff0c 如果成绩相同则按学号的升序排列 Select sno grade From sc Where cno 61 1 Order by grade D
  • linux内存测试工具memtester使用详解

    memtester官网 xff1a http pyropus ca software memtester linux安装 xff1a 下载安装包 1 wget http pyropus ca software memtester old v
  • Mybatis-plus使用pagehelper进行分页

    DROP TABLE IF span class token class name EXISTS span user span class token punctuation span CREATE span class token cla
  • Linux系统迁移(将配置好的系统安装到其它电脑上)

    Linux系统迁移 说在前面 xff1a 下面有几个教程链接 xff0c 我都是通过这几个链接来完成的系统备份与系统恢复 并且遇到过一些问题 xff0c 踩过一些坑 建议先看完我的说明再进行操作 xff0c 少走弯路 没有图是因为下面分享的
  • Linux上用code blocks写fortran代码

    Linux上用code blocks写fortran代码 用GNU带的fortran编译器编译 xff0c 居然出现错误 xff0c undifined reference to gfortran write st 在我删掉了这个proje
  • 字符串相关操作————2015小米笔试内容

    这个是一道小米公司2015的笔试题 xff1a 回文数 xff1a 一个字符串从前看和从后看如果一样的话 xff0c 就是回文串 比如 上海自来水来自上海 就是一个回文串 现在 xff0c 把一个数字看成一个字符串 xff0c 问他是不是一
  • 信息学奥赛C++语言:百钱买百鸡

    题目描述 百钱买百鸡问题 鸡翁一 xff0c 值钱五 xff0c 鸡母一 xff0c 值钱三 xff0c 鸡雏三 xff0c 值钱一 xff0c 百钱买百鸡 xff0c 问鸡翁 鸡母 鸡雏各几何 xff1f xff08 公鸡一只5块 xff
  • 业务运营支撑系统  BOSS(Business & Operation Support System)。

    BOSS名称是由中国移动联合多家咨询公司为传统电信企业 计费系统起的专门名称 xff0c 是世界上第一个对电信计费系统命名并制定相关标准 该系统由电信部门的计费系统发展而来 xff0c 基本功能包括用户资料管理 计费 出帐 结算等 xff0
  • 【C语言】10个数字按照从小到大进行排序(冒泡法)

    include lt stdio h gt main int a 10 61 5 2 4 25 13 11 7 8 0 12 需要进行排序的10个数字 int i j t for i 61 1 i lt 10 i 43 43 for j 6
  • 解决VS2015无法打开WinSock2.h,无法找到ws2_32.lib

    现象 xff1a VS2015无法找到ws2 32 lib xff0c 无法打开WinSock2 h以及nldef h文件 项目使用的SDK是Windows 8 1 SDK xff0c 使用everything在本地搜了一下确实没有找到8
  • apache-options配置之Indexes

    配置 Options Indexes FollowSymLinks Indexs的配置的作用是如果不存在Index html文件的时候 xff0c 将该目录下的文件树列出来 一般在线上使用
  • Ubuntu-有线网络无法上网的问题解决方法汇总

    转载别人的 xff0c 写的很详细很全 xff0c 值得收藏 https blog csdn net u010025211 article details 75043216 另外 xff0c 说一下在设置静态IP时 xff0c 点击右上角的
  • 【跨域问题】Access to XMLHttpRequest at ‘http://xxxx.com/xxx’ from origin ‘null’ has been blocked by

    错误描述 xff1a 项目中写了一个上传图片的接口 xff1b 给到别人使用出现这个错误 xff0c 具体分析原来是跨域报错 xff1b ajax调用接口出现 xff1a Access to XMLHttpRequest at http x