日常の開発プロセスでは、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 を使用して実装します。
パス = require("パス"),
fs = require("fs"),
local_folders、
Base_url;
local_folders = [ // ローカル パス。エージェントはこのリストのディレクトリでファイルを検索し、見つからない場合はオンライン アドレス
];
base_url = "http://10.232.133.214" // オンライン パス、ファイルが見つからない場合は、このアドレスにリダイレクトします
;
var i, l = local_folders.length,
fn;
console.log(" パス名をロードしてみます ");
for (i = 0; i fn = local_folders[i] パス名;
fs.readFile(fn, function (err, data) {
response.writeHead(302, {
});
console.log("「パス名」のリクエストを受信しました。");
Response.writeHead(200);
Response.write(data);
Response.end();
});
戻る;
}
応答.end();
}
http.createServer(
var req_url = request.url,
// http://a.tbcdn.cn/??p/global/1.0/global-min.css,tbsp/tbsp.css?t=20110920172000.css に似たリクエストを処理します
loadFile(パス名, 応答);
}).listen(80);
http 経由でパスにアクセスすると、上記のスクリプトはまず対応するローカル ディレクトリを検索し、見つからない場合は対応するオンライン ディレクトリに直接ジャンプします。住所。見つからない場合の別の解決策は、ローカル サーバーにオンラインから対応するコンテンツをダウンロードさせて返すことですが、この要件の場合は 302 ジャンプで十分です。
nodejs バージョンに加えて、Python バージョンも作成しました:
OS をインポート
BaseHTTPServer をインポート
LOCAL_FOLDERS = [
"D:/work/assets"
]
BASE_URL = "http://10.232.133.214"
クラス WebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
print "「%s」のリクエストを受け取りました。" % self.path
LOCAL_FOLDERS 内のフォルダー:
fn = os.path.join(folder, self.path.replace("/", os.sep)[1:])
if os.path.isfile(fn):
self.send_response(200)
self.wfile.write(open(fn, "rb").read())
休憩
その他:
self.send_response(302)
self.send_header("場所", "%s%s" % (BASE_URL, self.path))
server = BaseHTTPServer.HTTPServer(("0.0.0.0", 80), WebRequestHandler)
server.serve_forever()
ご覧のとおり、Python バージョンのバージョンは、nodejs バージョンよりも正確に向上しています。
上の 2 段階コードの機能は、出力コンテンツのない場合の MIME タイプ、コンテンツ長などの情報に比べて、起こり得るブロック操作 (文書の長時間取得など) に対しても特別な処理を行っていません。実際に公開されている環境では、これらはすでに動作可能なバージョンですが、さらに多くの要求を満たすために、この 2 つのスクリプトを継続して拡張することもできます。