首页 > 其他分享 >Ajax跨域问题

Ajax跨域问题

时间:2023-08-02 14:34:51浏览次数:34  
标签:www abc http 跨域 问题 Ajax com response

什么是跨域问题?

跨域问题来源于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>

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

标签:www,abc,http,跨域,问题,Ajax,com,response
From: https://blog.51cto.com/qiux/6938041

相关文章

  • js上传文件到服务器指定文件夹问题
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。 二、Range  用于请求头......
  • 【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开
    项目目标本次技术调研和分析报告,主要面向于总体分析和建立对应的MySQL数据库所需要从5.7版本升级到8.0版本后的Java应用服务项目的调整以及功能变动报告分析。MySQL8.0引入一些性能改进,例如新的查询优化器和索引算法。升级后,可以通过重新评估和优化项目中的SQL查询和索引来利用新......
  • csharp上传文件到服务器指定文件夹问题
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • 对于img跟其他标签总是有点间距的问题——将img改成display:block
    问题在学习前端的时候,设置其他元素跟img的间距,结果F12发现有一点间距在给img添加display:block后虽然还是有点,但基本大差不差,顺利解决......
  • python3 install 其他包 报:ModuleNotFoundError: No module named '_ctypes' 的问题
    python3install其他包报:ModuleNotFoundError:Nomodulenamed'_ctypes'的问题python2import_ctypes没有问题python3import_ctypes报上述错误,说明_ctypes确实无法导入。据网上资料显示时没有安装libdiff库,但使用yum安装后,还需要重新编译python3。但python3好......
  • 关于final修饰字段的初始化问题
    一、final修饰【实例变量】1.类下没有【无参的构造方法】时1.定义时显式赋值2.构造方法中赋值(每个构造方法都需要赋值)3.普通初始化块中赋值(静态初始化块不可以)2.类下有【无参的构造方法】时1.定义时显式赋值2.普通初始化块中赋值(静态初始化块不可以)二、final修饰......
  • 解决redhat不能使用yml指令的问题
    yum remove subscription-manager卸载redhat订阅提示,不然每次都提示你去注册This system is not registered to Red Hat Subscription Managementcurl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo配置centos8的源yum mak......
  • c#上传文件到服务器指定文件夹问题
    ​ IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag        客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续......
  • 因MySQL数据库无法启动导致LiteCVR视频平台也无法启动的问题解决教程
    近期呢,我们的数据人员发现有时候MySQL数据库无法启动会导致LiteCVR视频平台也无法启动,所以接下来我们将为大家讲解遇见这种问题时的解决教程。但是在这之前值得一提的一件事那就是我们的LiteCVR平台默认的数据库是SQLite,不过用户可以根据自己的使用需求选择将数据库切换为MySQL。具......
  • [MySQL] 调用定时器时event_scheduler是Off问题解决
    永久解决方法:修改MySQL配置文件,设置event_scheduler=ONvi/etc/my.cnf在[mysqld]下添加一行重启mysql服务event_scheduler=ON临时方法执行mysql语句1、查看事件调度器状态showVARIABLESlike'event_scheduler'......