一些廢話(直接看程式碼的可跳過)
“跨域了,咋搞啊!”
“問你自己啊,我們後臺不配合解決的。”
“你們寫幾句話就好了啊,cors、jsonp、header ......”
“搞不來!不合法!不安全!......”
“臥槽,這介面又跨域了,我CNMLGB”
“你TM不會自己url-get、form-post、寫nginx代理啊!” ......
幾個月後
複製程式碼
“這介面跨域了!”
“寫反向代理啊,上次你不是弄過嗎?”
“我TM早忘了......”
如果你無論如何都得仍受並面對這樣的後臺小夥伴的話,那這篇文章來解救你了,讓你的nginx配置資訊管理的又簡單,又清晰,而且fork一下github隨時都不會忘了呢~
面向讀者
- 無論如何都si不配合跨域的後臺兒子們
- 總忘記咋配置nginx代理的前端爸爸們
- 老想跨域幹些heiheihei的爬蟲紳士們
- 想解決或想了解跨域問題的萌新們 ......
想要達到的目的
- 只用一句命令列來執行配置檔案的建立、修改
- JS配置簡單明瞭,不會JS的小夥伴懂json格式就能輕易維護
![配置內容](https://i.iter01.com/images/e6b68176cf24db40ffe3c519ad896070618c4248e42d61b600ff5147dd0bdf0e.png)
- 對於水平稍高的朋友們可對程式碼進行二次開發
- 跨域不再困難
需要的工具
- node
- cmd(命令指示符)
Tips
以下內容會以初學者的角度進行並言簡意賅的方式急速說明,掌握者可以跳著看
複製程式碼
在開始之前您可能需要初步瞭解這些東西
1. 什麼是正向/反向代理
2. 什麼是跨域
1)什麼是正向/反向代理
正向代理:
我要拿C的資料,但請求不到C(例如谷歌),不過我知道B是能請求到C的,於是我去告訴B,B幫我拿回了C的資料,有點翻牆的意思。敲黑板,劃重點(C只知道B是他的小夥伴,並不知道A是誰)
反向代理:
我又要去拿C的資料了,不過這次運氣好,C我能直接訪問到(比如百度),那很棒哦,我自己搭建了個伺服器B,B幫我拿回了C的資料。敲黑板,劃重點(C並不知道B是他的小夥伴,因為AB是一夥的)
2)什麼是跨域
請求非自身(地址||埠)都算跨域
複製程式碼
寫一個非自身地址的AJAX的請求(起步)
步驟一:找介面
首先咋們開始在網站上找各種介面,那我這邊找了一個百度貼吧的post介面
請求頭
![貼吧post請求圖 --- 請求頭](https://i.iter01.com/images/8a54f440d4cc2d4c5ad0540c28dd87347df873f348473b0bed2bbc5215ac9182.png)
請求值
![貼吧post請求圖 --- 請求值](https://i.iter01.com/images/627d59ea1b960717f38ab9ca6cb5cb8274c8231ac4dca5af7b8df042511676bb.png)
返回值
![貼吧post請求圖 --- 返回值](https://i.iter01.com/images/e7ac94198e9508a26a9dc5804cf3771b2ba6b64d6d7a26e90615ca168b9b4e11.png)
步驟二:建立index.html發起AJAX請求
開啟你善用的編輯器直接複製以下程式碼
<!DOCTYPE>
<html>
<meta charset="UTF-8" />
<head>
<title></title>
</head>
<body></body>
<script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
<script>
$.ajax({
type: "post",
url: "http://tieba.baidu.com/connectmanager/user/updateFlashInfo",
data: '{"appid":"tieba","cuid":"73118464C47E43476FB3E50ACD8E32C9:FG:1","connection_id":"","lcs_ip":"10.46.235.62","lcs_port":"8891","lcs_fd":"10619","device_type":"21"}',
async: true,
success: function (res) {
document.write(JSON.stringify(res))
}
})
</script>
</html>
複製程式碼
跑服務試試?(這裡是從8020埠開啟的伺服器)
![ajax請求](https://i.iter01.com/images/0e5a5ecf0f446e61c6783f0b086532b13d623393298d2d50eb9ba8990e48aac3.png)
哇塞通啦,200誒!我啥都沒操作只是寫了個$.ajax就通了呀?通個毛......
以上console是標準的跨域error,就算返回200也會被瀏覽器自身給截掉,無論如何success都獲取不到Response裡的值
複製程式碼
開始nginx反向代理(進階)
這裡就不講正常情況下nginx如何配置了,百度很多。 這裡直接附上我的github,大家去下載並且我對以下程式碼進行JS配置講述
(下載是非常必要的,因為在github上我內建了nginx)
Github:https://github.com/gs3170981/nginx_quick
步驟一:配置server.js
1)下載完目錄結構應該是這樣的
這裡我內建了nginx,開不開心。
複製程式碼
![目錄結構](https://i.iter01.com/images/f23e7848e554ea208732d22a79f0e60e880de82063036fff73ca97175fe1282f.png)
2)開啟server.js,裡面大致內容是這樣的
![配置內容](https://i.iter01.com/images/e6b68176cf24db40ffe3c519ad896070618c4248e42d61b600ff5147dd0bdf0e.png)
3)如果你瞭解過或曾經配過nginx,那你一定很雞凍,沒錯,這裡呈現的就是配置項,意味著以後管理配置檔案只需要修改這兒就OK了,因為有註釋我就不一一解釋了。
注意'/'別寫反了,不然會被轉義報錯
步驟二:執行node命令
1)win+r 開啟你的cmd,cd到nginx所在的目錄(即是下載後所在的目錄)執行
node server
如果cmd沒報錯的話,你的檔案結構應該變成如此了
![檔案結構](https://i.iter01.com/images/e97a915680b57db7f015403a7a25b20bbf098f5e35a46ac364a8fa001b510fa7.png)
2)那麼請再執行
nginx
如果你除了關閉啥都點不了的話,說明開啟成功了(老司機一般都不會這樣用...嘿嘿,推薦到目錄下雙擊執行)
步驟三:請求試試!
nginx是伺服器,所以開啟的port必須為js檔案中設定的port
開啟127.0.0.1:8016
複製程式碼
![8016伺服器](https://i.iter01.com/images/d01f9666f57a4f48fbf231bef88fb73cfb102299822a50e57531d3d522b72ce8.png)
我擦,咋啥都沒顯示?不是js中都輸出了嗎?我們來看看控制檯
![請求](https://i.iter01.com/images/1f3a7d8c38a99d94b639f4e6d88a6cc1c9af2c8b72e0673f42e2c1ecaa987b7f.png)
汗,還是跨域了,不過如果你是老手的話,應該已經意識到為什麼開始要講解下什麼是正向/反向代理,因為還少一步
步驟四:最後再戰!
開啟index.html,修改一點點的程式碼
<!DOCTYPE>
<html>
<meta charset="UTF-8" />
<head>
<title></title>
</head>
<body></body>
<script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
<script>
$.ajax({
type: "post",
url: "connectmanager/user/updateFlashInfo", // 注意這裡改成了相對路徑
data: '{"appid":"tieba","cuid":"73118464C47E43476FB3E50ACD8E32C9:FG:1","connection_id":"","lcs_ip":"10.46.235.62","lcs_port":"8891","lcs_fd":"10619","device_type":"21"}',
async: true,
success: function (res) {
document.write(JSON.stringify(res))
}
})
</script>
</html>
複製程式碼
A、B是相互認識並在同一伺服器上的,B代理了C,則相當於同在了一個地址下,所以需改成相對路徑
好,儲存重新整理一下
![再請求](https://i.iter01.com/images/bdb8e096045cc24b033aeb32a4600166d35992c2aa7c2f71b3ffc7e12f3e88e1.png)
天啦嚕,好像成功呢了,再看下請求
![正確返回](https://i.iter01.com/images/777eb46699e1be616164f13db54d47604ffdf76c0b095ce99bcc72d6dd43e22d.png)
沒有報錯,正確返回了呢!
相關技術連結
該文章運用到了node(fs模組)想多瞭解的,請移步下方連結檢視
CSDN:http://blog.csdn.net/Mcky_Love/article/details/78679291
掘金:https://juejin.im/post/5a28aead6fb9a0450c494bc6
關於
make:o︻そ╆OVE▅▅▅▆▇◤(清一色天空)
blog:http://blog.csdn.net/mcky_love
github:https://github.com/gs3170981/nginx_quick(好用的話記得加星哦!)
結束語
該功能的實現主歸功於fs的檔案建立便利,此項可用於多種批量檔案/資料夾操作的環境,不單指向開發哦~