當前位置:
首頁 > 最新 > node.js 上手簡明教程!

node.js 上手簡明教程!

文/李信棟

引言 / 導讀:

前幾天隨手寫的 chrome 插件遇到了防盜鏈問題,由於插件不能用 js iframe 的方法反防盜鏈,於是想用伺服器做個中轉。

記錄一下上手項目的各個點,以後再用 nodejs 就不用到處查資料了。

之前沒有一套特別熟悉的 web 開發框架,加上插件存儲服務依賴的平台 LeanCloud 剛好支持部署 nodejs 網站,剛好拿這個小項目作為 nodejs 上手項目。

怎麼「破解防盜鏈」呢?

想要破解,就得先知道目標——防盜鏈如何實現。

大多數站點的策略很簡單: 判斷 request 請求頭的 refer 是否來源於本站。若不是,拒絕訪問真實圖片。

而我們知道: 請求頭是來自於客戶端,是可偽造的。

思路

那麼,我們偽造一個正確的 refer 來訪問不就行了?

整個業務邏輯大概像這樣:

自己的伺服器後台接受帶目標圖片 url 參數的請求

偽造 refer 請求目標圖片

把請求到的數據作為 response 返回

這就起到了圖片中轉的作用。

1. 項目是什麼樣子

1.1 介面的樣子?

有一個開放介面

介面有一個參數,api?url=http://abc.com/image.png,大概長這樣子

響應內容是反防盜鏈後的真實圖片

1.2 應該怎麼做?

把伺服器跑起來

處理 GET 請求

分析請求參數

下載原圖

response 原圖

2. 學習路徑(在對目標未知的前提下提出疑問)

如何開始,建立伺服器

如何處理基本請求 GET POST

如何下載圖片並轉發

完成基本功能,上線

優化

2.1 如何開始,建立伺服器

主要是 http.createServer().listen(port) 這組方法,建立伺服器、監聽埠一鍵搞定。

2.2 如何處理基本請求 GET POST

createServer 回調方法的兩個參數 req res 是 http request 和 response 的內容,列印一下他們的內容。

request 是 InComingMessage 類,列印它的 url 欄位。

請求

http://localhost:3000/api?url=http://abc.com/image.png

請求結果

query 欄位剛好是我們想要的內容,下載這個欄位對應的圖片。

2.3 如何下載圖片並轉發

request 模塊支持管道方法,可以和 shell 的管道一樣理解。

這可以省很多事,不需要在本地存儲圖片,不需要處理雜七雜八的事情,甚至不需要再去了解 nodejs 的流。一個方法全搞定。

關鍵方法: request(options).pipe(res)

2.4 完成基本功能,上線

項目地址:

https://github.com/auv1107/FileTransferServer/blob/master/routes/image.js

完整代碼

2.5 優化

這部分主要是防盜鏈部分的優化。

單就 Referer 來說,使用空值和主機名都只能滿足部分需求。一個優化方式是組合,當一種方式不能突破即採用另一種方式。這種方式的有點在於擴大了適用面積,並且方法對任何場景比較通用。

一個優化方式是介面請求參數帶源引用連接。這種方式對很多人來說不太通用,因為很多場景下並不清楚源引用連接在哪。是對我的插件來說非常適用,插件本身保留了源引用。因此可以很好的繞過防盜鏈限制。

end

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員之家 的精彩文章:

程序員全球最大的婚戀網站!
Git常用命令速查手冊
iOS11更新後11個新的隱藏功能?你一定不能錯過!
iPhone8以後直接iPhoneX的真相竟然是!
什麼樣的女生適合程序猿?

TAG:程序員之家 |