Spring Cloud出現(xiàn)Options Forbidden 403問題解決方法
摘要:本文簡(jiǎn)述了博主在開發(fā)過程中,需要跨域調(diào)試的時(shí)候,出現(xiàn)了 OPTIONS 請(qǐng)求 Forbidden 的問題,以及解決方法。
403 Forbidden 解釋:
Forbidden
You don't have permission to access / on this server.
Additionally, a 500 Internal Server Error error was encountered while trying to use an ErrorDocument to handle the request.
403 Forbidden 是HTTP協(xié)議中的一個(gè)狀態(tài)碼(Status Code)??梢院?jiǎn)單的理解為沒有權(quán)限訪問此站點(diǎn)。
問題
在使用 Spring Cloud 的項(xiàng)目中,本地跨域調(diào)試發(fā)現(xiàn) POST 請(qǐng)求轉(zhuǎn)為了 OPTIONS 請(qǐng)求,并且服務(wù)端拒絕訪問,其實(shí)是 CORS 請(qǐng)求的問題。
CORS 請(qǐng)求分為2類: 簡(jiǎn)單請(qǐng)求 和 非簡(jiǎn)單請(qǐng)求。兩者主要的區(qū)分點(diǎn)在于:
1: 請(qǐng)求方法為 HEAD, GET, POST;
2: HTTP 頭信息為以下幾個(gè): Accept, Accept-Language,Content-Language, Last-Event-ID,Content-Type (值為 application/x-www-form-urlencoded、multipart/form-data、text/plain)。
只要滿足以上兩點(diǎn),則為簡(jiǎn)單請(qǐng)求;否則為非簡(jiǎn)單請(qǐng)求。
簡(jiǎn)單請(qǐng)求的處理方式是瀏覽器直接發(fā)送 CORS 請(qǐng)求。非簡(jiǎn)單請(qǐng)求的處理方式是瀏覽器發(fā)送預(yù)檢請(qǐng)求,表示詢問服務(wù)器當(dāng)前的域名是否可以訪問正常服務(wù)器,如果可以訪問,則發(fā)送正常的請(qǐng)求到服務(wù)器;否則報(bào)錯(cuò)。
現(xiàn)在確定遇到的問題就是在 CORS 請(qǐng)求預(yù)檢的時(shí)候發(fā)現(xiàn)域名不在服務(wù)器端的白名單里面,所以需要修改服務(wù)端的請(qǐng)求返回報(bào)文。
解決方案
在網(wǎng)關(guān)中添加下面的過濾器,在每次請(qǐng)求返回報(bào)文中添加報(bào)文頭,即可正常訪問
@Component public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); response.setHeader("Access-Control-Expose-Headers", "Location"); chain.doFilter(req, res); } @Override public void init(FilterConfig filterConfig) {} @Override public void destroy() {} }
參考文章:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
設(shè)計(jì)模式之構(gòu)建(Builder)模式 建造房子實(shí)例分析
構(gòu)建模式主要用來針對(duì)復(fù)雜產(chǎn)品生產(chǎn),分離部件構(gòu)建細(xì)節(jié),以達(dá)到良好的伸縮性,考慮到設(shè)計(jì)模式來源于建筑學(xué),因此舉一個(gè)建造房子的例子,需要的朋友可以參考下2012-12-12java以json格式向后臺(tái)服務(wù)器接口發(fā)送請(qǐng)求的實(shí)例
下面小編就為大家分享一篇java以json格式向后臺(tái)服務(wù)器接口發(fā)送請(qǐng)求的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01Java實(shí)戰(zhàn)之簡(jiǎn)單的文件管理器
這篇文章主要介紹了Java實(shí)戰(zhàn)之簡(jiǎn)單的文件管理器,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04Java二維數(shù)組查找功能代碼實(shí)現(xiàn)
這篇文章主要介紹了Java二維數(shù)組查找功能代碼實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06SpringBoot攔截器如何獲取http請(qǐng)求參數(shù)
這篇文章主要給大家介紹了SpringBoot攔截器如何獲取http請(qǐng)求參數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09java核心編程之文件過濾類FileFilter和FilenameFilter
這篇文章主要為大家詳細(xì)介紹了java文件過濾類FileFilter和FilenameFilter,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08JAVA微信掃碼支付模式二線上支付功能實(shí)現(xiàn)以及回調(diào)
本篇文章主要介紹了JAVA微信掃碼支付模式二線上支付功能實(shí)現(xiàn)以及回調(diào),這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2016-11-11