nodejs と Python を使用して作成された単純な HTTP 静的ファイル サーバー

高洛峰
リリース: 2017-02-14 14:07:43
オリジナル
1318 人が閲覧しました

日常の開発プロセスでは、CDN 上に配置されたいくつかの静的ファイル (JavaScript、CSS、HTML ファイルなど) を変更する必要がよくあります。このプロセスでは、オンラインのディレクトリをマップする方法が必要です。ローカル ハードディスクへの CDN この方法では、ファイルをローカルで変更する場合、公開する必要がなく、更新後すぐに効果が確認できます。

たとえば、CDN ドメイン名は http://a.mycdn.com で、対応するローカル ディレクトリは D:workassets です。 http://a.mycdn.com/* へのすべてのアクセスが可能になることを願っています。ローカル D:workassets* の下にマッピングされます。たとえば、http://a.mycdn.com/s/atp.js にアクセスすると、実際には、インターネットからオンライン ファイルをダウンロードせずに、ローカルの D:workassetssatp.js を読み取っていることになります。

この関数の実装は非常に簡単で、重要なポイントは次のとおりです:

1. HTTP サービスをローカルで開き、ポート 80 をリッスンします。
2. システムのホスト ファイルを変更し、「127.0.0.1 a.mycdn」を追加します。 .com" に変更し、CDN ドメイン名を変更します。 ローカル サーバー アドレスにバインドします。
3. ローカル HTTP サービスを設定します。 GET リクエストを受信した後、まず、対応するファイルがローカル ハードディスク上に存在するかどうかを確認します。 存在する場合は、リターンします。ファイルの内容が存在しない場合は、対応する内容を返します。

ご覧のとおり、重要な部分はローカル HTTP サービスを構築することです。この分野には、Apache や Ngnix などのサーバー ソフトウェアをローカルにインストールし、対応する転送ルールを構成するなど、多くのチュートリアルがあります。ただし、この方法はまだ少し複雑だと個人的に感じています。この記事で紹介するのは、サーバー ソフトウェアのインストールを必要としない別の方法です。

ローカルで開発とデバッグを行うため、パフォーマンスと同時実行性の要件は高くありません。実際には、Apache/Ngnix のような専門的な HTTP ソフトウェアは必要ありません。HTTP サービスを提供できるスクリプトのみが必要です。たとえば、nodejs を使用して実装します。

コードをコピーします コードは次のとおりです:


/**
* 著者: oldj
*
**/

var http = require("http"),
url = require("url"),
path = require ("path" ),
fs = require("fs"),
local_folders,
Base_url;

local_folders = [ // ローカル パス。エージェントはこのリストのディレクトリでファイルを検索し、見つからない場合は、オンライン アドレスに移動します
"D:/work/assets"
];
base_url = "http://10.232.133.214"; // オンライン パス、ファイルが見つからない場合は、このアドレスにリダイレクトします


function loadFile(pathname, response ) {
var i, l = local_folders.length,
fn;

console.log("try toload " + pathname);

for (i = 0; i

fn = local_folders[i] + pathname;
if (path.existsSync(fn) && fs.statSync(fn).isFile()) {
fs.readFile(fn, function (err, data) {
応答.writeHead(200) ;
response.write(data);
response.end();
});

return;
}

}

response.writeHead(302, {
"場所":base_url + pathname
} );
response.end();
}

http.createServer(
function (request, response) {

var req_url = request.url,
pathname;

// 処理は http: //www.php.cn /,tbsp/tbsp.css?t=20110920172000.css リクエスト
pathname = req_url.indexOf("??") == -1 url.parse(request.url).pathname : req_url ;
console.log( "リクエスト '" + パス名 + "' を受け取りました。");
loadFile(パス名, 応答);

}).listen(80);


値の変更に注意してください必要な値については、上記の local_folders 変数とbase_url 変数を使用してください。たとえば、このファイルを local-cdn-proxy.js として保存し、コマンド ラインで「node local-cdn-proxy.js」を実行します。もちろん、ローカル サーバーが実行されることを忘れないでください。ホスト。

http 経由でパスにアクセスすると、上記のスクリプトはまず対応するローカル ディレクトリを検索し、見つかった場合は対応するファイルの内容を返します。見つからない場合は、対応するオンライン アドレスに直接ジャンプします。 。見つからない場合の別の解決策は、ローカル サーバーにオンラインから対応するコンテンツをダウンロードさせて返すことですが、この要件の場合は 302 ジャンプで十分です。

nodejs バージョンに加えて、Python バージョンも作成しました:


コードをコピーします コードは次のとおりです:


# -*-coding: utf-8 -*-
#
# 著者: oldj
#

import os
import BaseHTTPServer

LOCAL_FOLDERS = [
"D:/work/assets"
]
BASE_URL = "http://10.232.133.214"

class WebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler) :

def do_GET(self):
print "'%s' のリクエストを受信しました。" % self.path
LOCAL_FOLDERS のフォルダー:
fn = os.path.join(folder, self.path.replace("/", os.sep)[1:])
break

self.send_response(302)、80)、webrequesthandler)
server.serve_forever() Node.jsのバージョン。

上記 2 つのコードの機能は比較的単純です。たとえば、出力コンテンツの MIME-Type や Content-Length などのヘッダー情報はなく、考えられるブロック操作 (たとえば、ファイル読み取りタイムアウトなど)。これらはローカル開発環境向けにすでに動作するバージョンであり、より多くのニーズを満たすためにこれら 2 つのスクリプトを拡張し続けることができます。

nodejs と Python で書かれた単純な HTTP 静的ファイル サーバーに関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!