91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解Springboot+React項目跨域訪問問題

發布時間:2020-08-27 12:48:32 來源:腳本之家 閱讀:295 作者:https://blog.csdn.ne 欄目:編程語言

一、開發環境

  • 框架:springboot 1.5.10.RELEASE
  • 開發工具:IDEA
  • JDK:1.8
  • 前端框架:React 15.6.1
  • 瀏覽器:Chrome瀏覽器

二、跨域問題

本地使用ajax訪問localhost:8080端口時報錯:

Failed to load http://localhost:8080/test/test.do: No ‘Access-Control-Allow-Origin' header is present on the requested resource. Origin ‘null' is therefore not allowed access.

React與Springboot前后端分離,React端口為3000而Springboot端口為8080,跨端口訪問用尋常的ajax是無法跨域訪問的。

什么是跨域?

當客戶端向服務器發起一個網絡請求,url會有包含三個主要信息:協議(protocol),域名(host),端口號(port)。當三部分都和服務器相同的情況下,屬于同源。但是只要有一個不同,就屬于構成了跨域調用。會受到同源策略的限制。

同源策略限制從一個源加載的文檔或腳本如何與來自另一個源的資源進行交互。這是一個用于隔離潛在惡意文件的關鍵的安全機制。瀏覽器的同源策略,出于防范跨站腳本的攻擊,禁止客戶端腳本(如 JavaScript)對不同域的服務進行跨站調用(通常指使用XMLHttpRequest請求)。

三、解決方法

(1)java后端過濾器實現cros:

在后端配置過濾器CrosFilter

public class CorsFilter implements Filter {

  public void init(FilterConfig filterConfig) throws ServletException {
  }

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException {
    HttpServletResponse httpResponse = (HttpServletResponse) response;
    httpResponse.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");//設置允許跨域的域名,需要發送cookie信息,所以此處需要指定具體的域名,
    httpResponse.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    httpResponse.setHeader("Access-Control-Allow-Methods", "GET, PUT, DELETE, POST");//允許跨域的請求方式
    /**
     * ajax請求的時候如果帶有xhrFields:{withCredentials:true},
     * 那么服務器后臺在配置跨域的時候就必須要把Access-Control-Allow-Credentials這個請求頭加上去
     */
    httpResponse.setHeader("Access-Control-Allow-Credentials", "true");//允許發送Cookie信息
    httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // 支持HTTP 1.1.
    httpResponse.setHeader("Pragma", "no-cache"); // 支持HTTP 1.0. response.setHeader("Expires", "0");
    chain.doFilter(request, response);
  }

  public void destroy() {
    // TODO Auto-generated method stub
  }
}

參考:跨域資源共享 CORS 詳解——阮一峰

(2)使用代理服務器跨域訪問:

在dev.js中配置

devServer: {
      port: '3000',//開發端口
      host: '127.0.0.1',//主機地址
      historyApiFallback: false,
      disableHostCheck: true,
      noInfo: false,
      stats: 'minimal',
      inline: true,
      //開啟服務器的模塊熱替換(HMR)
      hot: true,
      // 和上文 output 的“publicPath”值保持一致
      publicPath: context,
      proxy: {
        '/mytest/*': {
          target: "http://localhost:8080",//對應后端端口
          secure: false,
          changeOrigin: true
        }//如果Controller的Requestmapping有多個這里也要對應多個
        ,'/test/*': {
          target: "http://localhost:8080",
          secure: false,
          changeOrigin: true
        }
      }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长沙市| 玛纳斯县| 大田县| 莱阳市| 静安区| 连江县| 泗洪县| 白水县| 嵊泗县| 东宁县| 鹤山市| 长阳| 沂源县| 昭平县| 高雄县| 准格尔旗| 静乐县| 阳江市| 花莲市| 都兰县| 乐清市| 锡林浩特市| 隆化县| 图木舒克市| 平顺县| 攀枝花市| 竹溪县| 武川县| 裕民县| 县级市| 克拉玛依市| 东源县| 前郭尔| 威海市| 泸水县| 九江县| 宜川县| 宿松县| 慈利县| 达孜县| 佛坪县|