Access to XMLHttpRequest at has been blocked by CORS policy: The request client is not a secure context and the resource is in more-private address space `local`.問題的解決


場景:

  前端是調用http://XXXXX:1808下的接口,但是網關代理后映射端口為18021,這導致前端頁面接口顯示也是18021,請求后端接口時需要跨域。

解決:

  跨域問題:是瀏覽器自帶的保證同源的安全策略,即:該頁面下的js請求只能是同協議,同IP,同端口(CROS標准),其中有一個不同,就是跨域問題。

  后端:使用.net core,需要在Startup.cs的Configure函數中添加以下:

app.UseCors(builder => builder.AllowAnyMethod() //允許任何方法
                    //.AllowAnyOrigin()  
                    .SetIsOriginAllowed(_ => true)  //允許任何源
                    .AllowAnyHeader()
                    .AllowCredentials());

  前端:用axios解決的,代碼如下:

axios
        .post(url, fd, {
          headers: {
            "Access-Control-Allow-Origin": "http://XXXXX:1808",
            "Access-Control-Allow-Methods": "*",
            "Content-Type": "multipart/form-data",
            "Access-Control-Allow-Headers": "TOKEN,content-type",
            "TOKEN": cookies.getToken()
          }
        })

  其中,Access-Control-Allow-Headers是需要傳的自定義的header。這里有一個自定義的Header。

  Access-Control-Allow-Methods可以填的詳細一點,值包括:POST, GET, OPTIONS等,其中的OPTIONS是必需的。因為跨域是非簡單請求,它會發兩次請求。第一次是OPTIONS,就是預檢,用來向后端詢問是否允許跨域。第二次才是把參數帶進去。

  Access-Control-Allow-Origin是要跨去哪里,即目標源。

  如果出現ERR_CONNECTION_REFUSED的問題,可能是Access-Control-Allow-Methods沒加OPTIONS。

參考:

  https://www.cnblogs.com/lishanlei/p/8823823.html

  https://blog.csdn.net/longgeqiaojie304/article/details/85270839


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM