老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

node和express如何搭建代理服務器-創新互聯

這篇文章將為大家詳細講解有關node和express如何搭建代理服務器,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

10年積累的網站制作、做網站經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站制作后付款的網站建設流程,更有雨花免費網站建設讓你可以放心的選擇與我們合作。



本例用node和express搭建的代理服務器。期望目標如下:

1、開啟某服務A,該服務可實現若干功能,例如普通的restful請求,文件上傳,靜態資源訪問等等。

2、開啟node代理服務B,指向服務A,訪問代理服務B,可訪問服務A的任意功能。

就如下圖所示:

node和express如何搭建代理服務器

圖中上半部分是直接訪問服務,下班部分是通過代理服務器訪問服務。

使用代理服務器時,瀏覽器向代理服務器請求數據,代理服務器轉發請求,并將接收到的數據返回給瀏覽器,即所有的數據都通過代理服務器轉發。
帶著這個目標,我們就講述下如何實現該功能。

既然是請求和響應轉發,那我們就了解一下,什么是請求。

請求和響應簡述

http請求和響應主要右報文頭部、空行和報文主體三個部分組成。

空行我們不用關心,其實對我們來說,只要完成報文頭部和報文主體的轉發,就可以說實現了代理功能。

請求和響應通過代理的整個過程如下:

1、代理服務器接收請求后,在將目標服務數據返回給瀏覽器前要保持請求。

2、提取請求路徑、請求頭、請求主體等數據。

3、以2中提取的數據為參數,向目標服務器發送請求。

4、接收目標服務器返回數據,提取響應頭,響應主體等數據。

5、將4中的提取出來的數據返回給客戶端(瀏覽器)。

6、斷開連接。

經過這幾個步驟,就實現了代理。

代碼實現

下面直接上代碼,然后做一些講解。代理函數如下:

const http = require('http');
const querystring = require('querystring');

//獲取請求的cookie和query等
let getHeader = (reqClient) => {
    let headers = reqClient.headers; 
    headers.path = reqClient.path;
    headers.query = reqClient.query;
    headers.cookie = reqClient.get('cookie') || '';

    return headers;
}

//代理函數,options是代理設置,包括目標服務器ip,port等
let proxy = (options) => {
    let reqOptions = {
        hostname: options.host,
        port: options.port
    }
    //返回請求處理函數,reqClient瀏覽器的請求,resClient是響應瀏覽器的對象
    return function (reqClient, resClient) {
        //設置目標服務器的請求參數,頭中的各項參數
        let headers = getHeader(reqClient);
        reqOptions.headers = reqClient.headers;
        let query = [];
        if (headers.query) {
            Object.keys(headers.query).map(key => {
                query.push(key + '=' + headers.query[key]);
            });
            reqOptions.path = headers.path + (query.length === 0 ? '' : ('?' + query.join('&')));
            
        }
        reqOptions.cookie = headers.cookie;
        reqOptions.method = reqClient.method;
        //向目標服務器發送請求,reqProxy是向目標服務器的請求,resProxy是目標服務器的響應。
        let reqProxy = http.request(reqOptions, (resProxy) => {
            resProxy.setEncoding('utf8');
            //設置返回http頭
            resClient.set(resProxy.headers);
            resClient.status(resProxy.statusCode);
            //接收從目標服務器返回的數據
            resProxy.on('data', (chunk) => {
                //接收目標服務器數據后,以流的方式向瀏覽器返回數據
                resClient.write(chunk);
            });

            //接收目標服務器數據結束
            resProxy.on('end', () => {
                //向瀏覽器寫數據結束。
                resClient.end();
            });
            //目標服務器響應錯誤
            resProxy.on('error', () => {
                //響應錯誤,結束向瀏覽器返回數據
                resClient.end();
            });
        });

        //接收瀏覽器數據
        reqClient.on('data', (chunk) => {
           //以流的方式向目標服務器發送數據
            reqProxy.write(chunk);
        });
        //接收數據結束
        reqClient.on('end', () => {
          //向目標服務器寫數據結束
            reqProxy.end();
        });
        
        //普通JSON數據代理
         if (Object.keys(reqClient.body).length) {
             reqProxy.write(querystring.stringify(reqClient.body));
             reqProxy.end();
         }
    }
}

module.exports = proxy;

上面就是node代理的核心代碼。支持普通的請求,靜態資源代理,文件上傳下載代理等功能。

git 地址:https://github.com/xubaodian/...

demo中,核心代碼在common/proxy.js里,我還實現了兩個測試服務。

在server文件下的app.js和app2.js是兩個服務的入口文件。

app2.js是目標服務器,有三個測試頁面

1、http://localhost:20000/json.html post請求測試,對應'/json'接口,可發送數據,f12查看請求是否成功

2、http://localhost:20000/upload.html 文件上傳測試,對應接口'/upload'接口,上傳文件,f12查看請求是否成功,同時在服務器upload文件夾下會有文件。

3、http://localhost:20000/get.html  get請求測試,對應接口'/get',同樣f12查看

app2為目標服務器,有3個接口。

1、'/upload'接口,測試文件上傳功能,上傳文件將放在uploads文件夾下,上傳的文件,文件名是一個uuid,沒有后綴,添加后綴即可查看文件是完整。測試過,傳1G的文件沒問題,再大的文件沒試過,有需要的可以試下

2、'/json',測試POST請求。

3、'/get',測試GET請求。

app.js為代理服務為器,監聽端口為18000,將所有請求轉發至app2,即所有app2的接口靜態資源,app中訪問時一致的。

測試步驟:
1、可開啟目標服務器,通過三個頁面測試功能。

2、開啟代理服務器,訪問下面三個頁面:

http://localhost:18000/json.html

http://localhost:18000/upload.html

http://localhost:18000/get.html

測試同樣的功能。若和步驟1實現同樣功能,則代理服務功能已經實現了。

經過測試,代理功能是沒問題的。

如果問題歡迎留言,或發送郵件至472784995@qq.com。

至于性能,我沒測過,因為我自己這邊的應用場景,訪問量都不大,可以使用。

關于node和express如何搭建代理服務器就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


網頁標題:node和express如何搭建代理服務器-創新互聯
網站路徑:http://www.xueling.net.cn/article/edjhi.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 国产欧美成人精品第二区 | 国产精品丝袜www爽爽爽 | 又爽又色禁片1000视频免费看 | 日韩婷婷 | 精品国产一卡2卡3卡4卡新区 | 久久福利免费视频 | 国产中文字幕欧美 | 亚洲在线视频一区 | 色综合视频网 | 亚洲视频aaa | 亚洲无亚洲人成网站77777 | 最近新中文字幕大全高清 | 亚洲欧美婷婷五月色综合 | 亚洲欧美日韩国产专区一区 | 互换人妻500部| 午夜亚洲国产理论片无码片 | av在线大片 | 五月天人体久久 | 久久久国产乱子伦精品 | 午夜伦理av | 91成人午夜性a一级毛片 | 免费看成人AA片无码视频吃奶 | 在线免费观看av网址 | 超鹏在线视频 | 性欧美久久久 | 亚洲愉拍一区二区三区 | 日本中文字幕在线视频 | 免费一级欧美在线观看视频 | 师兄啊师兄在线 | 搐搐国产丨区2区精品av | 国产精品久久久久久久久快鸭 | 日本一区二区三区免费看 | 成人免费网站视频 | 亚洲精品一区二区三区蜜桃久 | 国产无av码在线观看 | 国产在线观看精品一区二区三区 | 国产免费播放一区二区三区 | 中文字幕亚洲欧美在线不卡 | 96久久久 | 欧美牲交a欧美牲交aⅴ免费真 | av片国产|