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

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

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 {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic 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);}}@Overridepublic 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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

错误代码:0xc000007b 解决思路

三维电子沙盘项目: 现场环境部署时,二维平台和模型在实际部署中遇到了0xc000007b的问题,网上很多说是DX的问题,但并不能解决。 之前在编译OpenDDS时也遇到过类似的问题,是在不同版本的OpenDDS的动态库混用时遇到的&a…

上传本地项目到git

1、到需要上传的文件夹下,打开gitbase 2、git init 3、git add . 4、git commit -m init 5、验证权限 首先在Git Bash中输入:ssh-keygen -t rsa -C "youremailxxx.com" 然后一路回车,这个会在当前用户文件夹下,生成.ssh 文件夹,里边…

vue 设置全局变量、指定请求的 baseurl

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 安装 axios&#xff1a; npm install axios --save-dev 2. 新建一个 Base.vue 文件&#xff0c;书写内容如下&#xff1a; <sc…

解决这九种困扰 可以让你每天精神百倍

晚上睡眠是人体最好的休息方式&#xff0c;人体的很多症状都会在充足的睡眠后得到缓解&#xff0c;良好的睡眠比世界上的任何药都灵&#xff0c;而现代社会&#xff0c;“一觉睡到自然醒”已是很多人可望而不可及的了。我经过多年的仔细观察&#xff0c;发现只要是在早晨醒来后…

基于java的数据结构学习——泛型动态数组的封装

public class Array<E> {private E[] data;private int size;// 构造函数public Array(int Capacity){data (E[])new Object[Capacity];size 0;}// 默认构造函数public Array(){this(10);}// 判断数组是否已满public boolean isFull(){return size data.length;}// 判…

POJ1207-The 3n + 1 problem

http://poj.org/problem?id1207 注意输入两个数的大小&#xff0c;水。。。 #include <stdio.h> int main(void) {int a,b,m,count,i,max;while(scanf("%d%d",&a,&b)!EOF){printf("%d %d ",a,b);if(a>b){ma;ab;bm;}max0;for(ia;i<b;i…

解决:vue.esm.js?efeb:591 [Vue warn]: Do not use built-in or reserved HTML elements as component id: me

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 报错如题&#xff1a; vue.esm.js?efeb:591 [Vue warn]: Do not use built-in or reserved HTML elements as component id: menu …

JetBrains 系列软件汉化包

Android Studio 3.0-3.1 汉化包 CLion 2018.1 汉化包 GoLand 2017.3.2-2018.1 汉化包 IntelliJ IDEA 2017.3-2018.1 汉化包 PhpStorm 2017.3-2018.1 汉化包 PyCharm 2017.3-2018.1 汉化包 RubyMine 2017.3.2-2018.1 汉化包 WebStorm 2017.3-2018.1 汉化包 下载完毕后&#xff…

JAXP进行DOM和SAX解析

1.常用XML的解析方式&#xff1a;DOM和SAX 1&#xff09;DOM思想&#xff1a;将整个XML加载内存中&#xff0c;形成文档对象&#xff0c;所以对XML操作都对内存中文档对象进行。 2&#xff09;SAX思想&#xff1a;一边解析&#xff0c;一边处理&#xff0c;一边释放内存资源---…

VScode 格式化代码快捷键、修改快捷键

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 请看仔细快捷键是&#xff1a; shift alt F // 我是从 eclipse 转的 idea &#xff0c;现在再用 vscode , 一直条件反射的按的 c…

信息学竞赛的常数优化、常见问题、代码风格相关

在查std::ios::sync_with_stdio(false);有关信息时&#xff0c;看到https://blog.csdn.net/qq_33583069/article/details/53086992 这篇博客&#xff0c;对其中一些问题比较感兴趣&#xff0c;整理了下相关资料&#xff1a; isdigit()https://blog.csdn.net/cupidove/article/d…

TCP报文格式详解

TCP协议只定义了一种报文格式 建立、拆除连接、传输数据使用同样的报文 TCP报文格式 TCP报文段首部&#xff08;20个字节&#xff09; 源端口和目的端口&#xff1a;各占2个字节&#xff0c;16比特的端口号加上32比特的IP地址&#xff0c;共同构成相当于传输层服务访问点的地址…

Vue 生命周期中 mounted( ) 和 created( ) 的区别

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、什么是生命周期&#xff1f; 用通俗的语言来说&#xff0c;就是Vue中实例或者组件从创建到消灭中间经过的一系列过程。虽然不太严谨…

科目三考试

马上要考大路了&#xff0c;考科目三考试必须做到什么事啊&#xff1f; 2012-5-30 8:46:23检举  注意事项   1、上车后确认车上电脑信息后&#xff0c;关好车门&#xff0c;系好安全带&#xff0c;打左转向灯起步。   2、直线行驶路段必须使用二档行驶。否则将被判…

基于java的数据结构学习——数组实现的栈以及简单应用

栈 Stack 栈是一种线性结构相比数组&#xff0c;栈对应的操作是数组的子集只能从一端添加元素&#xff0c;也只能从一端取出元素这一端称为栈顶栈是一种后进先出的数据结构 栈的应用 无处不在的Undo操作&#xff08;撤销&#xff09;括号匹配&#xff08;编译器&#xff09;程…

Python 总结题目

题例1 # 打印如下长方形&#xff1a; ************ * * * * ************ # 打印如下长方形&#xff1a; print("*****************") print("* *") print("* *") print("****************…

vue : 引入、安装 jquery 、bootstrap

一、vue安装jquery 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、新建一个vue工程。 2、在项目文件夹下&#xff0c;使用命令 npm install jquery --save-dev 引入jquery。 np…

2013驾考科目三考试难点解析

原来规定科目三考试上车准备、起步、直线行驶等13个道路驾驶技能项目。123号令实施后&#xff0c;科目三考试分两部分。道路驾驶技能考试项目增加到16项&#xff0c;增加了加减挡位操作、路口左转弯、路口右转弯3个考试项目&#xff0c;驾驶里程也增加。如何顺利通过2013驾考科…

leetcode练习——栈(1)

题号20&#xff1a;Invalid Parentheses Given a string containing just the characters (, ), {, }, [ and ], determine if the input string is valid. An input string is valid if: Open brackets must be closed by the same type of brackets.Open brackets must be…

Asp.Net MVC 页面代码压缩筛选器-自定义删除无效内容

Asp.Net MVC 页面代码压缩筛选器 首先定义以下筛选器&#xff0c;用于代码压缩。 /*页面压缩 筛选器*/public class WhiteSpaceFilter : Stream{private Stream _shrink;private Func<string, string> _filter;public WhiteSpaceFilter(Stream shrink, Func<string, s…