解決跨域問題: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.pswp.cn/news/448171.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448171.shtml
英文地址,請注明出處:http://en.pswp.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…