サーバーは盗難防止チェーンの写真を中継して、nodejsの上手なプロジェクトの簡明な教程
5118 ワード
個人ブログ:スコットアンの時間
サーバーは盗難防止チェーンの写真を中継して、nodejsの上手なプロジェクトの簡明な教程
先日ついでに書いたchromeプラグインは盗難チェーンの問題に出会いました.プラグインはjs iframeの方法で盗賊チェーンを防ぐことができないので、サーバーで乗り換えをしたいです.
上手な項目の各点を記録して、後で
これまでは特におなじみのウェブ開発の枠組みがなかったが、プラグイン記憶サービスに依存するプラットフォーム
どのように「防犯クラックチェーン」ですか?解読したいなら、まず目標を知らなければなりません.防犯チェーンはどうやって実現しますか?ほとんどのサイトのポリシーは簡単である:
私達は知っています.要求ヘッドはクライアントから来たもので、偽造可能です.
考え方は正しいreferを偽造して訪問すればいいのではないですか?全体の業務ロジックは大体このようです.自己のサーババックグランドは、ターゲットピクチャ .偽造 は、要求されたデータを に返す.
これは写真の中継の役割を果たしました.
1.プロジェクトはどうなりますか?
1.1ポートの様子?はオープンインターフェース があります.インターフェースにはパラメータがあります. 応答内容は、盗難防止チェーン後の真の画像 である.
1.2どうすればいいですか?サーバを走らせます. 処理GET要求 解析要求パラメータ ダウンロード原図 レスポンス原図 2.学習経路(目標が未知であることを前提に疑問を提起する)どうやってサーバーを開始しますか? 基本要求GET POST はどのように処理しますか?どのように画像をダウンロードし、 に転送しますか?基本機能を完成し、オンライン 最適化 2.1どうやってサーバーを開始しますか?
主に
2.3どのように写真をダウンロードして転送しますか?
これは多くの事を省くことができて、現地で写真を保存する必要がなくて、雑多な事を処理する必要がなくて、甚だしきに至っては更に
重要な方法:
プロジェクトのアドレス
完全コード
この部分は主に盗難防止チェーン部分の最適化です.
一つの最適化方式は組み合わせであり、一つの方法が突破できない場合は別の方式を採用する.この方式は適用面積を拡大し,どのシーンに対しても方法が一般的である点がある.
最適化は、インターフェース要求パラメータバンドソース参照接続である.このような方式は多くの人にとってあまり通用しません.多くの場面ではソース引用がどこにつながっているか分かりません.しかし、私のプラグインにはとても適しています.プラグイン自体はソース参照を保持しています.そのため、防犯チェーンの制限をうまく回避できます.
サーバーは盗難防止チェーンの写真を中継して、nodejsの上手なプロジェクトの簡明な教程
先日ついでに書いたchromeプラグインは盗難チェーンの問題に出会いました.プラグインはjs iframeの方法で盗賊チェーンを防ぐことができないので、サーバーで乗り換えをしたいです.
上手な項目の各点を記録して、後で
nodejs
を使って、至るところ資料を調べなくてもいいです.これまでは特におなじみのウェブ開発の枠組みがなかったが、プラグイン記憶サービスに依存するプラットフォーム
LeanCloud
は、ちょうどnodejs
ウェブサイトの配置をサポートしていた.どのように「防犯クラックチェーン」ですか?解読したいなら、まず目標を知らなければなりません.防犯チェーンはどうやって実現しますか?ほとんどのサイトのポリシーは簡単である:
nodejs
要求ヘッドのrequest
が自局から来ているかどうかを判断する.もしそうでないなら、真実の画像へのアクセスを拒否します.私達は知っています.要求ヘッドはクライアントから来たもので、偽造可能です.
考え方は正しいreferを偽造して訪問すればいいのではないですか?全体の業務ロジックは大体このようです.
refer
パラメータを有する要求を受け付けるurl
要求対象ピクチャrefer
としてこれは写真の中継の役割を果たしました.
1.プロジェクトはどうなりますか?
1.1ポートの様子?
response
、このように長いです.1.2どうすればいいですか?
主に
api?url=http://abc.com/image.png
のこの方法で、サーバーを創立して、ポートを傍受してキーを押して解決します.var http = require('http');
http.createServer(function (request, response) {
// do things here
}).listen(8888);
console.log('Server running at: 8888');
2.2基本要求GET POSTはどのように処理しますか?http.createServer().listen(port)
コールバック方式の2つのパラメータcreateServer
req
は、http res
とrequest
の内容であり、彼らの内容を印刷してください.response
はrequest
クラスで、そのInComingMessage
フィールドを印刷します.var http = require('http');
var url = require('url');
var util = require('util');
http.createServer(function(req, res){
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(util.inspect(url.parse(req.url, true)));
}).listen(3000);
要求url
請求の結果Url {
protocol: null,
slashes: null,
auth: null,
host: null,
port: null,
hostname: null,
hash: null,
search: '?url=http://abc.com/image.png',
query: { url: 'http://abc.com/image.png' },
pathname: '/api',
path: '/api?url=http://abc.com/image.png',
href: '/api?url=http://abc.com/image.png' }
http://localhost:3000/api?url=http://abc.com/image.png
フィールドはちょうど私たちが欲しい内容です.このフィールドの対応する画像をダウンロードします.2.3どのように写真をダウンロードして転送しますか?
query
モジュールは、パイプライン方法をサポートしており、request
のパイプラインと同様に理解できる.これは多くの事を省くことができて、現地で写真を保存する必要がなくて、雑多な事を処理する必要がなくて、甚だしきに至っては更に
shell
の流れを理解する必要がありません.一つの方法は全部解決します.重要な方法:
nodejs
var options = {
uri: imgUrl, // uri , ,
headers: {
'Referer': referrer //
}
};
request(options).pipe(res);
2.4基本機能を完成し、オンラインプロジェクトのアドレス
完全コード
'use strict';
var router = require('express').Router();
var http = require('http');
var url = require('url');
var util = require('util');
var fs = require('fs');
var callfile = require('child_process');
var request = require('request');
router.get('/', function(req, res, next) {
var imgUrl = url.parse(req.url, true).query.url;
console.log(url.parse(req.url,true).query);
console.log('get a request for ' + imgUrl);
if (imgUrl == null || imgUrl == "" || imgUrl == undefined) {
console.log('end');
res.end();
return;
}
var parsedUrl = url.parse(imgUrl);
// Referer
var referrer = parsedUrl.protocol + '//' + parsedUrl.host;
console.log('referrer ' + referrer);
var options = {
uri: imgUrl,
headers: {
'Referer': referrer
}
};
function callback(error, response, body) {
if (!error && response.statusCode == 200) {
console.log("type " + response.headers['content-type']);
}
res.end(response.body);
}
// request(options, callback);
request(options)
.on('error', function(err) {
console.log(err)
})
.pipe(res);
});
module.exports = router;
2.5最適化この部分は主に盗難防止チェーン部分の最適化です.
request(options).pipe(res)
だけでは、空き値とホスト名の使用は一部の需要を満たすしかない.一つの最適化方式は組み合わせであり、一つの方法が突破できない場合は別の方式を採用する.この方式は適用面積を拡大し,どのシーンに対しても方法が一般的である点がある.
最適化は、インターフェース要求パラメータバンドソース参照接続である.このような方式は多くの人にとってあまり通用しません.多くの場面ではソース引用がどこにつながっているか分かりません.しかし、私のプラグインにはとても適しています.プラグイン自体はソース参照を保持しています.そのため、防犯チェーンの制限をうまく回避できます.