Programming/node.js2019. 4. 17. 18:27

간단하게 말하면 / 가 붙으면 directory

없으면 file로 간주하고 그에 따라 행동이 달라진다는 내용

[링크 : https://djkeh.github.io/articles/Why-do-we-put-slash-at-the-end-of-URL-kor/]

 

근데.. 클라이언트나 서버에서 임의로 /를 붙여서 해석하다 보니

어떤곳에서는 /가 붙고 어떤것에서는 /가 안 붙는데

요즘에는 RESTful API에 의해서

/는 단순 구분자가 되었고

/api/stone/

/api/stone/apply

식으로 꼬리에 꼬리를 물게 구성가능하다 보니

기존의 디렉토리, 파일 구조로 캐싱하기 쉽지가 않다..

 

+

node.js 에서 끝에 /로 끝나는 것 찾기

[링크 : https://stackoverflow.com/questions/6165381/how-to-get-the-last-part-of-a-string-in-javascript/6165387]

Posted by 구차니
Programming/node.js2019. 4. 16. 18:21

'Programming > node.js' 카테고리의 다른 글

nodejs url param delete  (0) 2019.04.17
url 끝의 /  (0) 2019.04.17
크롬에서 "사용가능한 소켓 대기중" 상태표시줄 메시지  (0) 2019.04.16
proxy error: Error: write after end  (0) 2019.04.15
https cache proxy using node.js  (0) 2019.04.12
Posted by 구차니
Programming/node.js2019. 4. 16. 12:41

프록시 갈군다고 크롬으로 하다 보니.. 아래에서 자꾸 먼가 뜨는데

찾아보니.. 지금도 그런진 모르겠지만 크롬은 소켓 6개까지 열수 있다고

그래서 ajax 등으로 소켓이 닫히지 않으면 이런식으로 대기가 걸리는 고질적인 문제가 있다고 한다.

프록시에서 그럼 응답을 못 받으면 헤어나질 못하게 되는건가?

 

[링크 : https://dev18.tistory.com/35]

[링크 : https://dev.uhoon.co.kr/entry/waiting-for-available-sockets-사용-가능한-소켓-대기-중-에러-원인과-확인]

 

+

아래 링크로 가면 관리 페이지가 뜨긴 하는데 상세 소켓별 상태를 볼 수 있는건 아님

[링크 : chrome://net-internals/#sockets]

'Programming > node.js' 카테고리의 다른 글

url 끝의 /  (0) 2019.04.17
js array key 삭제하기  (0) 2019.04.16
proxy error: Error: write after end  (0) 2019.04.15
https cache proxy using node.js  (0) 2019.04.12
node.js mkdir -p 옵션 사용하기  (0) 2019.04.10
Posted by 구차니
Programming/node.js2019. 4. 15. 18:20

에러는 뜨는데 어떻게 해결해야 할지 감이 안오네..

 

[링크 : https://stackoverflow.com/questions/27769842/write-after-end-error-in-node-js-webserver]

Posted by 구차니
Programming/node.js2019. 4. 12. 17:10

제목만 거창해지고 있네 ㅋㅋ

fs.mkdirSync(path, {recursive:true}); 로 해보려는데

1개 까진 생성해도 2개 깊이는 생성이 안되서 mkdirp 라는 모듈을 사용해서 해결

(아니 그럼.. parent 생성기능이 안되는 거잖아?)

[링크 : https://www.npmjs.com/package/mkdirp]

 

그리고 request가 아니라 response를 해주어야 하는거라 저장용도로는 일단 되는 듯

이걸 어떻게 request에 묶어서 다시 보내주지?

+

context에서 clientresponse를 통해 보내면 되는 듯.

ctx.proxyToClientResponse.end('Hacked, you cannot proceed to the website');

[링크 : https://github.com/joeferner/node-http-mitm-proxy/blob/master/examples/preventRequest.js]

 

var Proxy = require('http-mitm-proxy');
var proxy = Proxy();
var path = require('path');
var url = require('url');
var { URLSearchParams } = require('url');
var decode = require('urldecode')
var mkdirp = require('mkdirp');

var fs = require('fs');
var idx = 0;
var chunks = [];

proxy.use(Proxy.wildcard);

proxy.onError(function(ctx, err) {
                console.error('proxy error:', err);
                });

proxy.onRequest(function(ctx, callback) {
                {
                ctx.use(Proxy.gunzip);
                var pback = ctx.clientToProxyRequest.url;

                var params = new URLSearchParams(url.parse(pback).query);
                params.sort();
                //console.log(url.parse(pback).pathname + '?' + decode(params.toString()));

                ctx.onResponseData(function(ctx, chunk, callback) {
                        chunks.push(chunk);
                        return callback(null, chunk);
                        });
                }

                ctx.onResponseEnd(function(ctx, callback) {
                                //  console.log('REQUEST END', (Buffer.concat(chunks)).toString());
                                console.log('REQUEST END');
                                // console.log(path.basename(oriname.pathname))
                                // console.log(path.dirname(oriname.pathname))

                                var oriname = url.parse(ctx.clientToProxyRequest.headers.host + ctx.clientToProxyRequest.url)
                                var dirname = 'save/' + path.dirname(oriname.pathname) + '/';
                                var filename = path.basename(oriname.pathname) + idx;
                                //              idx++;
                                console.log(dirname);
                                console.log(filename);
                                mkdirp.sync(dirname);
                                fs.writeFileSync(dirname + filename, Buffer.concat(chunks));
                                chunks = [];
                                return callback();
                                });
                return callback();
});

proxy.onCertificateRequired = function(hostname, callback) {
        return callback(null, {
keyFile: path.resolve('/ca/certs/', hostname + '.key'),
certFile: path.resolve('/ca/certs/', hostname + '.crt')
});
};
proxy.listen({port: 3128});

 

 

 

[링크 : https://www.npmjs.com/package/http-mitm-proxy]

Posted by 구차니

걍 새로운 배열로 바꿔치기 하는게 최고인듯 (메모리 누수는 안일어 나려나?)

 

testArray = [];

[링크 : http://jsben.ch/hyj65]

   [링크 : https://stackoverflow.com/questions/1232040/how-do-i-empty-an-array-in-javascript]

'Programming > javascript & HTML' 카테고리의 다른 글

closure  (0) 2019.04.24
iife (Immediately Invoked Function Expression)  (0) 2019.04.23
js 난독화  (0) 2019.03.14
HTML video 태그 loop 와 webalizer hit  (0) 2019.02.28
자바 스크립트 다시 공부 - 이벤트 관련  (0) 2019.02.28
Posted by 구차니
Programming/node.js2019. 4. 10. 17:01

node.js 10.x 부터 지원하는 녀석으로(native support)

recursive 옵션을 주고 mkdir 하는게 가장 깔끔할 듯

fs.mkdirSync(targetDir, { recursive: true });

 

[링크 : https://nodejs.org/api/fs.html#fs_fs_mkdirsync_path_options]

[링크 : https://www.npmjs.com/package/mkdirp]

[링크 : https://github.com/shelljs/shelljs]

    [링크 : https://stackoverflow.com/questions/31645738/how-to-create-full-path-with-nodes-fs-mkdirsync]

Posted by 구차니
Programming/node.js2019. 4. 8. 14:28

프록시 설정에서 3128로 모두 처리하도록 하고(http, https 모두 3128 포트)

자동 생성된 인증서를 x509 타입으로 바꾸어서 윈도우에 믿을수 있는 root CA로 등록하면 해결 (HSTS 문제 우회)

$ cd ./.http-mitm-proxy/certs/ca.pem
$ openssl x509 -outform der -in ca.pem -out der.pem

 

아무튼 아래와 같이 하면.. 데이터는 어쩔수 없지만 HTML 등은 볼 수 있을 듯

var Proxy = require('http-mitm-proxy');
var proxy = Proxy();
var path = require('path');

proxy.use(Proxy.wildcard);

proxy.onError(function(ctx, err) {
  console.error('proxy error:', err);
});

proxy.onRequest(function(ctx, callback) {
 {
    ctx.use(Proxy.gunzip);
console.log('');
console.log(ctx.clientToProxyRequest.headers.host);
console.log(ctx.clientToProxyRequest.url);

    ctx.onResponseData(function(ctx, chunk, callback) {
//     chunk = new Buffer(chunk.toString().replace(/<span.*?<\/span>/g, '<span>Pwned!</span>'));

      return callback(null, chunk);
    });
  }
  return callback();
});


proxy.onResponse(function(ctx, callback) {
 return callback();
 });

proxy.onResponseData(function(ctx, chunk, callback) {
console.log(chunk.length);
console.log(chunk.toString());
 return callback(null, chunk);
 });

proxy.onCertificateRequired = function(hostname, callback) {
  return callback(null, {
    keyFile: path.resolve('/ca/certs/', hostname + '.key'),
    certFile: path.resolve('/ca/certs/', hostname + '.crt')
  });
};
proxy.listen({port: 3128});

[링크 : https://www.npmjs.com/package/http-mitm-proxy]

 

+

var Proxy = require('http-mitm-proxy');
var proxy = Proxy();
var path = require('path');
var url = require('url');
var { URLSearchParams } = require('url');
var decode = require('urldecode')

proxy.use(Proxy.wildcard);

proxy.onError(function(ctx, err) {
  console.error('proxy error:', err);
});

proxy.onRequest(function(ctx, callback) {
 {
    ctx.use(Proxy.gunzip);
    console.log(ctx.clientToProxyRequest.headers.host);

    var pback = ctx.clientToProxyRequest.url;
    console.log(ctx.clientToProxyRequest.url);

    var params = new URLSearchParams(url.parse(pback).query);
    params.sort();
    console.log(url.parse(pback).pathname + '?' + decode(params.toString()));

    ctx.onResponseData(function(ctx, chunk, callback) {
//     chunk = new Buffer(chunk.toString().replace(/<span.*?<\/span>/g, '<span>Pwned!</span>'));

      return callback(null, chunk);
    });
  }
  return callback();
});


proxy.onResponse(function(ctx, callback) {
 return callback();
 });

proxy.onResponseData(function(ctx, chunk, callback) {
 return callback(null, chunk);
 });

proxy.onCertificateRequired = function(hostname, callback) {
  return callback(null, {
    keyFile: path.resolve('/ca/certs/', hostname + '.key'),
    certFile: path.resolve('/ca/certs/', hostname + '.crt')
  });
};
proxy.listen({port: 3128});

 

[링크 : https://nodejs.org/docs/latest-v8.x/api/url.html]

[링크 : https://www.npmjs.com/package/urldecode]

[링크 : https://opentutorials.org/module/938/7369]

Posted by 구차니
Programming/node.js2019. 4. 5. 15:08

머.. 별건 아니고(?)

path 모듈에서 fs 모듈로 변경되어서 에러난 놈을 열어보고 모듈을 바꾸어주면 일단 ok 인듯?

(만약 그거 하나만 문제라면..)

 

[링크 : https://github.com/horaci/node-mitm-proxy]

'Programming > node.js' 카테고리의 다른 글

node.js mkdir -p 옵션 사용하기  (0) 2019.04.10
http-mitm-proxy 예제  (0) 2019.04.08
node.js mitm proxy (for https)  (0) 2019.04.02
proxy http node.js  (0) 2019.04.01
TypeError: Converting circular structure to JSON  (0) 2019.03.27
Posted by 구차니
Programming/openMPI2019. 4. 2. 22:27

MPI + thread 어쩌구 나오길래 보는 중

openMPI는 Message Passing Interface니까.. 받는 쪽에 데몬이 있어야 할텐데

어떤식으로 주고 받는지 모르겠네..

 

[링크 : http://wgropp.cs.illinois.edu/courses/cs598-s16/lectures/lecture36.pdf]

[링크 : http://ympahk.blogspot.com/2014/05/openmpi.html]

[링크 : http://ap2.khu.ac.kr/download/mpi_lec.pdf]

[링크 : https://www.open-mpi.org/faq/?category=running]

 

+

2019.04.03

서비스 돌리는거 보면 의외로 별거 없는데.. 어떻게 설정하는거지?

[링크 : https://openfoamwiki.net/index.php/Installation/Linux/OpenFOAM-4.x/CentOS_SL_RHEL]

'Programming > openMPI' 카테고리의 다른 글

ubuntu mpich cluster  (0) 2017.02.05
opempi 패키지  (0) 2017.02.04
openmpi with heterogenerous  (0) 2017.02.03
openmpi with openmp  (0) 2017.02.03
OpenMP 그리고 OpenMPI  (2) 2011.09.19
Posted by 구차니