1. 程式人生 > 其它 >VUE3(vite)使用百度智慧雲API時出現的跨域問題解決辦法

VUE3(vite)使用百度智慧雲API時出現的跨域問題解決辦法

學習踩坑記錄22-03-05

經驗:VUE3(vite)使用百度智慧雲API時出現的跨域問題解決辦法

專案簡介:通過vue的admin框架(axios)請求百度智慧雲人臉識別相關API介面時出現跨域錯誤,在本地環境下測試正常,可以正常訪問介面且功能全部正常,將專案build後部署到伺服器,開啟網頁後傳送所有百度請求出現跨域問題的解決方法。

第一步:看本地代理 如果本地代理名字叫api的話,反向代理名字也是api(看src下的api資料夾)

第二步:看.env.production(生產環境)下的

# 介面請求地址,會設定到 axios 的 baseURL 引數上

VITE_APP_API_BASEURL = https://www.xxxxxx.xxx/api

看此地址是否設定正確

第三步:兩種方法任意一種都可以

(方法一):看寶塔面板網站的配置檔案裡面是否在SSL證書文字的下面繼續新增,重點是第一句的正則表達

location ~ ^/(api)/.* {
    rewrite  ^.+api/?(.*)$ /$1 break;
    include  uwsgi_params;
    root  /usr/share/nginx/html;
    proxy_pass https://aip.baidubce.com;
    \#  proxy_set_header Host $http_host;
}

(方法二):看網頁反向代理裡面的配置檔案,重點在location /api/這個規則裡裡面的rewrite ^.+api/?(.*)$ /$1 break; 這句正則表達匹配請求

#PROXY-START/
location ~* \.(gif|png|jpg|css|js|woff|woff2)$
{
    proxy_pass https://aip.baidubce.com;
    proxy_set_header Host aip.baidubce.com;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    expires 12h;
}

location /api/
{
    rewrite  ^.+api/?(.*)$ /$1 break;
    proxy_pass https://aip.baidubce.com;
    proxy_set_header Host aip.baidubce.com;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;

    add_header X-Cache $upstream_cache_status;

    \#Set Nginx Cache

		add_header Cache-Control no-cache;
      proxy_intercept_errors on;
      error_page 301 302 307 = @handle_redirects;
      }

      location @handle_redirects {
		set $saved_redirect_location 'https://aip.baidubce.com';
		proxy_pass $saved_redirect_location;
	}

\#PROXY-END/

同時注意:如果請求地址是https,而自己的頁面是http,則需要將自己的網站也通過寶塔SSL功能申請證書,新增為HTTPS,否則依然會存在跨域問題。

所涉及到的nginx相關知識點:

Rewite 規則

  • Rewrite規則可以實現對url的重寫,以及重定向

作用場景:

  • URL訪問跳轉,支援開發設計,如頁面跳轉,相容性支援,展示效果等

  • SEO優化

  • 維護:後臺維護、流量轉發等

  • 安全

    簡單例項

    rewrite ^(.*)$ /pages/maintain.html ``break``;
    

    解釋說明:

    • 會把所有的請求都重定向到 /pages/maintain.html 頁面

    • 常用的正則表示式
    • $1表示路徑中正則表示式匹配的第一個引數

設定網站為HTTPS後,寶塔面板或者網站無法正常開啟

解決辦法:通過ping該網站拿到網站ip後新增:面板埠號後即可解決(面板仍然為http模式,如果打不開就清理瀏覽器全部快取後重新開啟瀏覽器進入寶塔面板);並且需要放行寶塔面板安全中TPPS的埠,埠號:443,同時雲伺服器的安全組策略中也需要放行443埠。