欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Cloud出現(xiàn)Options Forbidden 403問題解決方法

 更新時(shí)間:2017年11月07日 09:42:38   作者:1CSH1  
本篇文章主要介紹了Spring Cloud出現(xiàn)Options Forbidden 403問題解決方法,具有一定的參考價(jià)值,有興趣的可以了解一下

摘要:本文簡(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() {}

}


參考文章:

跨域資源共享 CORS 詳解

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論