跨域解決方案通常分爲兩種:前端解決,後端解決javascript
經過前端解決的思想就是,經過設置中間件把跨域的請求轉發一下,其實就是反向代理,好比 http://1.2.3.4:8099 想要訪問豆瓣的接口
http://www.douban.com/v?a=1很...,可是若是請求的是http://1.2.3.4:8099/api/v?a=1 就不存在跨域html
反向代理就是截取 /api 以後重寫請求 將請求轉發到http://www.douban.com/ 服務器上前端
疑問後續更新:關於轉發,究竟是幾回請求vue
後端解決方案,通常是須要後端參與java
如下介紹react
# vue-cli 腳手架 # 安裝axios 和 跨域支持的包 http-proxy-middleware npm i axios --save-dev npm install --save-dev http-proxy-middleware #vue-cli 已經把http-proxy-middleware寫在項目依賴裏面了
# 在豆瓣API上隨便找一個接口作測試,以一下接口爲例 https://api.douban.com/v2/book/1220562
Snip20180806_8.png
jquery
Snip20180806_14.png
ios
Snip20180806_9.png
nginx
Snip20180806_11.png
ajax
Snip20180806_10.png
2.1 在虛擬機關閉狀態下,選擇虛擬機,安裝vmware-tools
2.2 在ubuntu中直接使用 apt 安裝 以後會介紹
3.1 有hgfs說明已經有共享文件的掛載點
3.2 若是沒有hgfs文件 說明安裝的vm-tools可能和ubuntu版本有衝突
# 查看當前設置的共享文件 #sudo vmware-hgfsclient # 上述命令可能因爲沒有安裝包報錯,因此先安裝一下包 # apt-get install open-vm-tools # apt-get install open-vm-tools-desktop # apt-get install open-vm-tools-dkms # 本身手動建立hgfs並掛載 # mkdir /mnt/hgfs # vmhgfs-fuse .host:/ /mnt/hgfs # 使用文件查看是否有權限進入 /mnt/hgfs 若是沒有使用一下命令 # sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other -o nonempty # 每次進入系統都須要本身mount 能夠配置/etc/fstab .host:/ /mnt/hgfs vmhgfs defaults 0 0
完成以上步驟,你會發現 /mnt/hgfs/XXX XX 爲你設置的共享目錄
修改配置文件位置:vim /etc/nginx/sites-available/default
location / { # 配置共享文件的位置 root /mnt/hgfs/ftp; # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; }
403錯誤可能有兩種狀況,不要誤覺得真的沒有權限
至關良心的解決方案
我用的豆瓣隨便的一個接口來測試的
location /api{ # 重寫 rewrite ^.+api/?(.*)$ /$1 break; # 配置代理 proxy_pass https://api.douban.com; }
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script src="jquery.js"></script> <title>Title</title> </head> <body> <div> <button id="btn1">測試跨域</button> <div id="content"></div> </div> <script type="text/javascript"> $(document).ready(function () { $("#btn1").click(function () { // 全部豆瓣請求都以 /api 開始 注意相對絕對路徑 $.get("/api/v2/book/1220562", function (data, status) { alert("數據: " + JSON.stringify(data) + "\n狀態: " + status); $("#content").html(JSON.stringify(data)) }); }); }); </script> </body> </html>
Snip20180805_4.png
Snip20180805_5.png
Snip20180805_6.png
Snip20180805_7.png