Ajax跨域问题

2023-11-08

什么是跨域问题?

跨域问题来源于JavaScript的"同源策略",即只有 协议+主机名+端口号 (如存在)相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和ajax的,html本身没有跨域问题。

查看浏览器开发者工具Console报错:

Failed to load ​​http://a.a.com:8080/A/FromServlet?userName=123​​: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '​​http://b.b.com:8080​​' is therefore not allowed access.

案例:

http://www.abc.com/a/b​ 调用​ http://www.abc.com/d/c​(非跨域)

http://www.abc.com/a/b ​调用 ​http://www.def.com/a/b ​(跨域:域名不一致)

http://www.abc.com:8080/a/b​ 调用 ​http://www.abc.com:8081/d/c​ (跨域:端口不一致)

http://www.abc.com/a/b​ 调用 ​https://www.abc.com/d/c​ (跨域:协议不同)

localhost 127.0.0.1 也可能存在跨域问题

解决跨域问题

常用方式:设置过滤器

1、引入servlet-api的依赖

<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>

2,编写跨域处理的过滤器

package com.gxa.filter;


import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CorsFilter implements Filter {


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

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {


        HttpServletRequest request= (HttpServletRequest) req;
        HttpServletResponse response= (HttpServletResponse) res;

        /* 允许跨域的主机地址 */
        response.setHeader("Access-Control-Allow-Origin", "*");
        /* 允许跨域的请求方法GET, POST, HEAD 等 */
        response.setHeader("Access-Control-Allow-Methods", "*");
        /* 重新预检验跨域的缓存时间 (s) */
        response.setHeader("Access-Control-Max-Age", "3600");
        /* 允许跨域的请求头 */
        response.setHeader("Access-Control-Allow-Headers", "*");
        /* 是否携带cookie */
        response.setHeader("Access-Control-Allow-Credentials", "true");

        //判断前端发送的是否是预请求,如果是,直接返回,并且告诉他允许的请求方式
        if("OPTIONS".equalsIgnoreCase(request.getMethod())) {
            return;
        }

        chain.doFilter(request,response);

    }

    @Override
    public void destroy() {

    }
}

3,在web.xml中注册过滤器

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>com.gxa.filter.CorsFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

这样,前后端就可以解决跨域问题了

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

Ajax跨域问题 的相关文章

  • 哪个类调用了我的静态方法?

    假设我有一个带有静态方法的 Java 类 如下所示 class A static void foo Which class invoked me 进一步假设 A 类有任意数量的子类 class B extends A class C ext
  • Eclipse 自动完成更改变量名称

    只是一个愚蠢的问题 但很难搜索 因为有很多关于 Eclipse 自动完成的主题 而且很难找到与我的问题匹配的内容 所以问题是 如果我写 MyClass MyVarName 然后按空格键 添加 new MyClass Eclipse 自动添加
  • 使用 java 的 RAR 档案 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 获取TextView的高度

    我有一些文字将被放入TextView 我这样做是使用setText 现在我需要找到文本在文本中占据的行数或高度TextView 我尝试使用getHeight 但它总是返回 0 无论如何 有没有办法获得文本中存在的文本的高度TextView
  • DateTimeFormatter.parseLocalDate 抛出 UnsupportedOperationException

    该API用于解析本地日期 http joda time sourceforge net apidocs org joda time format DateTimeFormatter html parseLocalDate 28java la
  • 根据哈希值确认文件内容

    我需要 检查完整性 content文件数量 文件将写入 CD DVD 可能会被复制多次 这个想法是识别正确复制的副本 在从 Nero 等中删除它们之后 我对此很陌生 但快速搜索表明Arrays hashCode byte http down
  • 总结二维数组

    鉴于我当前的程序 我希望它在用户输入所有值后计算每列和每行的总和 我当前的代码似乎只是将数组的值加倍 这不是我想要做的 例如 如果用户输入具有以下值 1 2 3 2 3 4 3 4 5 的 3x3 矩阵 则看起来就像我在下面的程序中对其进行
  • 在java.util中获取错误ArrayList不带参数[重复]

    这个问题在这里已经有答案了 我已经创建了一个类 Student 现在我尝试将我的 Student 对象存储在 ArrayList 中 但在编译 ArrayList 不接受参数时出现错误 我已经检查了我的代码很多次 但找不到问题所在 我的学生
  • Java 反射:如何检索匿名内部类?

    我在另一个类中有一个匿名内部类 SomeClass Both SomeClass class getClasses and SomeClass class getDeclaredClasses 返回空数组 我在中找不到一些关于此的提示Cla
  • java.lang.UnsupportedOperationException:无法解析索引 13 处的属性:TypedValue{t=0x2/d=0x7f010046 a=-1}

    我在 android attrs xml 文件中添加了一个用于不同色调的属性 在 styles xml 文件中 我为这些属性指定了颜色 因此每种样式的它们都不同 Attrs xml
  • Java中的OR运算(BitSet.class)

    如何编写一个程序 该程序需要001010101110000100100 011100010001000011000 000000000010000000000100 作为输入 位 输出将是OR其中 3 个 OR 0 0 0 0 1 1 1
  • activemq 的优先级

    我们目前正在使用 JMS 和 activemq 5 5 1 开发一个应用程序 我们想为某些消息定义更高的优先级 这将使它们首先被消耗 设置生产者和消费者后 通过spring 3 1 JMSTemplate 优先级并不能完全发挥作用 事实上
  • 使用 include 进行 JAXB 剧集编译不起作用

    我有 2 个模式 A B 我在 B 中重用了一些 A 元素 我不使用命名空间 我在用着
  • wsdl 没有服务元素

    我必须使用 WCF Web 服务并获得 WSDL 外部的 因此无法控制 WSDL 在 WSDL 定义中 我没有找到包含服务 端口和地址元素的服务元素 WSDL 中不存在这种情况正常吗 这对于 WCF WSDL 来说很常见吗 我正在尝试使用轴
  • java 1.8下无法启动eclipse

    java 1 8 升级后我无法启动 eclipse 附上错误截图 这是我的 eclipse 配置设置 我该如何解决 startup plugins org eclipse equinox launcher 1 3 0 v20120522 1
  • 处理照片上传的最佳方式是什么?

    我正在为一个家庭成员的婚礼制作一个网站 他们要求的一个功能是一个照片部分 所有客人都可以在婚礼结束后前往并上传他们的照片 我说这是一个很棒的想法 然后我就去实现它 那么只有一个问题 物流 上传速度很慢 现代相机拍摄的照片很大 2 5 兆 我
  • 我可以关闭并重新打开套接字吗?

    我学习了一个使用套接字的例子 在此示例中 客户端向服务器发送请求以打开套接字 然后服务器 侦听特定端口 打开套接字 一切都很好 套接字从双方 客户端和服务器 打开 但我仍然不清楚这个东西有多灵活 例如 客户端是否可以关闭一个打开的 从两端
  • 计算移动的球与移动的线/多边形碰撞的时间(2D)

    我有一个多边形 里面有一个移动的球 如果球撞到边界 它应该反弹回来 My current solution I split the polygon in lines and calculate when the ball hits the
  • Microsoft JDBC 中的 JTDS 属性相当于什么?

    我正在将 JTDS 连接更改为 Microsoft JDBC 并且我看到存在于http jtds sourceforge net faq html http jtds sourceforge net faq htmlMicrosoft JD
  • 使用 Hibernate 防止无限循环数据检索

    我想知道 想象一个场景 例如 POJO public class User private String userName private String name private String surname private List

随机推荐

  • 信号和槽机制

    信号和槽是一种高级接口 应用于对象之间的通信 它是QT的核心特性 也是QT区别于其它工具包的重要地方 信号和槽是QT自行定义的一种通信机制 它独立于标准的C C 语言 因此要正确的处理信号和槽 必须借助于一个称为moc Meta Objec
  • c++申请内存空间的本质

    c 申请内存空间的本质 void teseTwo char cc 8 cout lt lt void cc lt lt endl cout lt lt 将cc的内存空间存储字符串 lt lt endl strcpy s cc hello c
  • Unity解析服务器Json文件

    文章目录 需求 Json文件存在服务器上 Unity要获取并解析它 原理 通过 UnityWebRequest类获取服务器文本 的功能 把Json文件传输到本地 再通过写好的解析类 Unity自带的JsonUtility FromJson
  • Linux下运行Jmeter压测

    一 在Linux服务器先安装SDK 1 先从官网下载jdk1 8 0 131 tar gz 再从本地上传到Linux服务器 2 解压 tar xzf jdk1 8 0 131 tar gz 生成文件夹 jdk1 8 0 131 3 在 us
  • 配置tomcat5.5 jndi 各种配置方式 分析总结(mysql)

    准备工作 安装tomcat5 5 注意这点 安装mysql 拷贝mysql驱动到tomcat home common lib下 新建一个web工程 在工程中加入index jsp
  • 获取B站SESSDATA及解决403

    获取B站SESSDATA 登录B站 按F12打开控制台 找到SESSDATA复制即可 解决B站防盗链 403 B站开启了防盗链 利用的是HTTP的Referer属性做判断 如果Referer是他白名单之外的网站 就会返回403 全站图片使用
  • 4-4面向对象编程(上)----再谈方法(3)--方法参数的值传递机制

    重点 3 方法参数的值传递机制 一 方法 必须由其所在类或对象调用才有意义 若方法含以后参数 1 形参 方法声明时的参数 2 实参 方法调用时实际传给形参的参数值 二 Java的实参值如何传入方法中的 Java里方法的参数传递方式只有一种
  • Android app专项测试之耗电量测试

    前言 耗电量指标 待机时间成关注目标 提升用户体验 通过不同的测试场景 找出app高耗电的场景并解决 01 需要的环境准备 1 python2 7 必须是2 7 3 X版本是不支持的 2 golang语言的开发环境 3 Android SD
  • OpenCV-Python 图像缩放

    缩放就是调整图片的大小 使用cv2 resize 函数实现缩放 图像的大小可以手动指定 也可以指定缩放比例 也可使用不同的插值方法 插值方式 cv INTER NEAREST 最近邻插值 cv INTER LINEAR 双线性插值 cv I
  • Qt学习之Qt基础入门(上)

    1 前言 上一篇博客 简单的介绍了一下C 的面向对象编程 这篇博客就主要是用来入门Qt 废话不多说 开干 Qt入门系列 Qt学习之C 基础 Qt学习之Qt安装 Qt学习之Qt基础入门 上 Qt学习之Qt基础入门 中 Qt学习之Qt基础入门
  • 第一个Echarts

    安装node js教程 解决cnpm v 不能运行的问题 使用pycharm进行代码编写 步骤 1 在pycharm中新建一个文件夹 在文件夹中新建一个html file 2 在pycharm project中 找到新建文件夹 在文件夹中新
  • 20仿函数(functors)

    1 仿函数概述 仿函数 functors 是早期的命名 新名称是函数对象 function objects 函数对象是指一种具有函数特质的对象 所以仿函数的本质就是一个行为类似函数的对象 仿函数主要用途是搭配STL算法 这种东西在调用者可以
  • Search for a Range

    Given an array of integers nums sorted in ascending order find the starting and ending position of a given target value
  • Dubbo 、 OpenFegin 远程服务调用的使用区别

    Dubbo 与 OpenFegin 都利用于远程调用层面 其中包括协议 负载均衡等都有不同的点 并且在使用上面也有不同的形式 简约记录一下两者的用法 1 服务端 dubbo 1 添加dubbo依赖 2 服务类添加 DubboService
  • jmeter——生成多样的接口自动化html报告

    jmeter 生成多样的接口自动化html报告 一 实现目的 二 实现效果 1 jmter自带的HTML报告 2 jmeter ant报告优化 3 批量执行jmeter工具 4 jmeter allure生成测试报告 三 实现方案 1 jm
  • 数据结构与算法——线性表

    个人主页 bit 系列专栏 Linux Ubuntu 入门必看 C语言刷题 目录 2 1线性表的定义和特点 2 2 案例引入 2 3 线性表的定义 2 1线性表的定义和特点 线性表是具有相同特新的数据元素的一个有限序列 列如 同一线性表中的
  • 解决:Error [ERR_REQUIRE_ESM]: require() of ES Module C:\Users\辰之星\AppData\Roaming\npm\node_modules\n

    解决 Error ERR REQUIRE ESM require of ES Module C Users 辰之星 AppData Roaming npm node modules nrm node modules open index j
  • 特征工程是什么?

    特征工程是指对原始数据进行预处理和转换 以提取出对机器学习算法建模有用的特征的过程 特征工程是机器学习中非常重要的一步 它可以显著影响模型的性能 下面是一些常见的特征工程技术和方法 数据清洗 处理缺失值 异常值和重复值 确保数据的质量和完整
  • taro请求工具封装

    taro框架是一个跨端兼容的开发框架 自带了请求相关的API 虽然灵活 但是封装程度并不高 会导致比较多的代码冗余 因此封装了一个请求相关的工具 思路如下 1 请求和响应需要拦截器 针对不同的情况做不同的处理 2 开发中分为开发 测试 生成
  • Ajax跨域问题

    什么是跨域问题 跨域问题来源于JavaScript的 同源策略 即只有 协议 主机名 端口号 如存在 相同 则允许相互访问 也就是说JavaScript只能访问和操作自己域下的资源 不能访问和操作其他域下的资源 跨域问题是针对JS和ajax