解决跨域问题:No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.

2023-05-16

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

PS:如果遇到 这个问题 Request header field Content-Type is not allowed by Access-Control-Allow-Headers,解决方法见另一博文:解决:Request header field Content-Type is not allowed by Access-Control-Allow-Headers

 

1. 场景描述:

我前端是一个 vue 工程,写的是绝对 URL 请求后端工程接口,报错如题:

No 'Access-Control-Allow-Origin' header is present on the requested resource

2.解决方法,后端开放跨域:新增一个过滤器,设置头信息。

重点是这个设置:

response.setHeader("Access-Control-Allow-Origin", "*");
package gentle.filter;

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

/**
 * 解决跨域设置
 * (可把此设置放在 nginx 中,但只能设置一处)
 *
 * @author silence
 * @date 2018/12/11 15:19
 */

@WebFilter(filterName = "requestFilter", urlPatterns = {"/*"})
public class RequestFilter implements Filter {

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

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        
        // 此处 setHeader、addHeader 方法都可用。但 addHeader时写多个会报错:“...,but only one is allowed”
        response.setHeader("Access-Control-Allow-Origin", "*"); 
//        response.addHeader("Access-Control-Allow-Origin", request.getHeader("origin"));
        // 解决预请求(发送2次请求),此问题也可在 nginx 中作相似设置解决。
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Cache-Control,Pragma,Content-Type,Token, Content-Type");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        String method = request.getMethod();
        if (method.equalsIgnoreCase("OPTIONS")) {
            servletResponse.getOutputStream().write("Success".getBytes("utf-8"));
        } else {
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }

    @Override
    public void destroy() {

    }

}

 再次请求,可以了。

 

3. 前后端工程也有作反向代理。前端工程部署时使用浏览器默认端口:80 。后端工程端口为 8089 。nginx 监听端口 8082 。

前端请求后端 URL 为:http://  nginx所在服务器 IP : 8082 

前端工程请求 8082,nginx 收到请求再转发到实际服务,取得数据,并最终再返回。

(nginx 所在服务器也就是代理服务器,可以和后端服务器为同一主机)

在 nginx 配置文件中设置为:

端口占用情况如下:红框是 nginx 、黄框是前端工程、蓝框是后端工程。

PS: springboot 项目中过滤器使用方法见文章:Springboot 项目中过滤器的使用

 

---------------------------------------------------------------------

后记 :解决报错见文章 :springboot&ajax&has been blocked by CORS policy: No 'Access-Control-Allow-Origin

另报错:The 'Access-Control-Allow-Origin' header contains multiple values'x, *', but only one is allowed.的解决方式见文章:

解决:The 'Access-Control-Allow-Origin' header contains multiple values'x, *', but only one is allowed.

---------------------------------------------------------------------

补记:

2019.5.16

作了以上配置后出现情况:跨域问题时好时不好,最后在 nginx 代理中加了一个假性集群配置:

这样,请求后端成功。访问正常。此处的 ergouzi 只是 upstream 的名字。

事实上后端工程项目只部署在 8089 上,其实 8082 上什么也没有。

---------------------------------------------------------------------

补记:

2019.6.5

其实不用配置假性集群,之所以会出现上面时好时不好情况的原因仅是由于我队友当时的操作:

他也用我服务器,那段时间有时会重启他应用的服务,而当他重启之前会执行命令:

ps -ef | grep java | awk '{print $2}' | xargs kill -9

查出当前运行的所有java程序再一并 kill ,

这样我的服务也挂了,而我只注意到前端工程请求失败,并未去查看后端工程服务是否正常。

好吧 ,这个我也应该检讨自己太粗心 ...

 

参考:https://blog.csdn.net/qq_39403545/article/details/82116121 

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

解决跨域问题:No ‘Access-Control-Allow-Origin‘ header is present on the requested resource. 的相关文章

  • 无法从 NGINX 获取包含句点的标头

    标题 Abp TenantId is null因为 如果删除 like AbpTenantId 一切都会安好的 如何添加标题 localhost debug 显示临时标头 根据客户请求显示 Request Headers Unknown 在
  • 304 未修改问题

    抱歉 标题可能有误 我正在编写一些代码来处理 If Modified Since 和 If None Match 请求作为缓存的一部分 除了 PHP 在标头后面返回一些内容 空行 之外 一切都很完美 页面内容应该为空 我正在使用的代码是
  • 如何使用 jquery mobile 和 data-position="fixed" 来“修复”页眉页脚位置

    我正在使用 jquery mobile 对于页眉 页脚 我使用 data position fixed 但是 当我们滚动页面时 页眉页脚消失并在滚动停止时重新出现 有没有一种方法可以让它在您滚动时始终固定在屏幕上并显示 我只能想到一种方法是
  • 在 RMarkdown 文档的 R 包中包含 TeX 标头

    我想创建一个包含 Latex 头文件的 R 包 然后可以从 RMarkdown 文档中使用该头文件来通过 TeX 创建带有幻灯片的 PDF 当我在 RMarkdown 文档的标题中包含对 Latex 文件的引用时 我可以创建幻灯片 但我不知
  • Scapy:如何获取完整的 IP 数据包标头?

    在 Scapy 中 我想要manually将数据包与其相应的 ICMP 超时消息进行匹配 我需要匹配 ICMP 数据包的 IP in ICMP 字段 IP 标头和数据包的前 8 个字节 ICMP 数据包不是问题 icmpPayload st
  • 在 HttpWebRequest 中添加自定义标头

    我需要添加一些自定义标头HttpWebRequest目的 如何添加自定义标头HttpWebRequestWindows Phone 7 中的对象 您使用Headers具有字符串索引的属性 request Headers X My Custo
  • 变量重定义,嵌入式c

    我正在开发一个嵌入式 c 项目 并且遇到全局变量重新定义的问题 我已将函数声明和定义分成几个 h 和 c 文件 其中许多函数需要访问全局变量 这些变量在 global vars h 中定义 因此 在头文件的开头 ifndef define
  • 在头文件中使用声明

    我一直在寻找有关使用的一些说明使用声明在头文件中 我正在四处搜索 但无法完全得到我正在寻找的答案 到目前为止我的研究得出的结论是 将它们用于非全局的范围是好的 而命名空间指令则不好 我明白 至少我希望如此 所以在我的例子中我使用shared
  • c 中导入的头文件使用了哪些函数?

    我正在阅读这个用 C 编写的庞大代码库 在某些文件中包含一些标头 但未指定其需要 我想知道是否有任何方法可以查看当前文件中的特定标头使用了哪些函数 而无需阅读两个文件中的整个代码 最简单的方法是检查预处理文件 编译器的预处理器将生成声明或定
  • 如何设置 TabControls TabItem 标题 FontSize

    我有一个 TabControl 其样式可以更改 TabItem 标题的 FontSize 当我数据绑定 ItemsSource 时 只有标题受 FontSize 影响 但是 当我在另一个 TabControl 上使用相同的样式并在 XAML
  • “make”是否可以检查依赖项的 mtime 在运行之间是否“不同”,而不仅仅是它是否比目标新?

    如果 foo user cpp 依赖于 foo h 则构建了 foo user cpp 然后将 foo h 的修改时间设置为更早的时间 make 将不会重建 foo user cpp 因为 foo cpp 是 较新的 我更希望 make 记
  • 标题消息就像 Stack Overflow 中一样

    这是我第一次访问堆栈溢出 我看到了一条漂亮的标题消息 其中显示了文本和关闭按钮 标题栏是固定的 非常能吸引访问者的注意力 我想知道你们中是否有人知道获得相同类型标题栏的代码 快速的纯 JavaScript 实现 function Messa
  • 我想使用条件注释使 DIV 仅出现在 IE7 或更早版本的浏览器中 如下所示 据我了解 条件注释仅在标题中起作用 这很糟糕吗 我应该使用条件注释来插入一个样式表来创建不可见的 DIVvisibility visible 是的bad http
  • 生成 Java JNI 标头

    我想做的就是使用 JDK Javah exe 程序生成 JNI 头文件 但无论我尝试什么 我都会收到错误消息 错误 找不到 ddg ndkTest NativeLib 的类文件 其中 ddg ndkTest 是命名空间 NativeLib
  • 如何在树视图标题中“创建”和“导入”按钮 Odoo 8 附近添加按钮?

    我可以成功在表单视图标题或树视图行中添加按钮 但我想在 Odoo 8 中 创建 和 导入 按钮附近的树视图标题中添加自定义按钮 我该如何执行此操作 我找到了解决我的问题的方法 如果我使用 我会替换创建按钮project project mo
  • Doxygen 在子目录中找不到标头

    我正在使用 Doxygen 记录 C 库的头文件 在里面Doxyfile 我定义 INPUT include 希望 Doxygen 能够为所有头文件生成文档include Foo 但事实并非如此 只有index html被生成 我可以设置I
  • 保护登录和评论表单免受 CSRF 攻击

    我读过很多关于CSRF保护的文章 这个不错 http seclab stanford edu websec csrf csrf pdf 以及关于SO的各种问题 但它们似乎都没有足够的信息来回答我的问题 我正在开发自己的 CMS 我想保护我的
  • 是否可以防止 DataGridView 中出现多行 HeaderText?

    当长度为HeaderText属性达到一定的字符限制并且文本中有空格 WinForms 会自动在标题中插入链接中断 我想要的是 Measurement Value 我得到什么 Measurement Value 有足够的空间来显示所有标题单元
  • 如何避免函数的多重定义(Linux、GCC/G++、Code::Blocks)

    我有一个代码块项目 它使用许多不同的文件 通常是由其他程序员编写的 目前我遇到的情况是 我有两个不同的子项目 其中包含以相同方式命名的函数 比方说 F int x 因此 F int x 是在两个不同位置的两个源文件中定义的 并且它们有两个不
  • style.css 在 WordPress 中不起作用

    我的 WordPress 有问题 我已经创建了所有需要的文件 包括 style css index php 等 但页面没有样式 在标题中 除其他外 我把这个

随机推荐