Node 에서 http 모듈 상세 설명(서버 편)

8914 단어 Node자바 script
Node 의 Http
Node 에 서 는 http 모듈 을 제공 합 니 다.그 중에서 효율 적 인 http 서버 와 http 클 라 이언 트 http.server 는 이벤트 기반 HTTP 서버 이 고 내 부 는 c++로 이 루어 집 니 다.인 터 페 이 스 는 JavaScript 로 http.request 를 패키지 하 는 것 은 HTTP 클 라 이언 트 도구 입 니 다.사용자 가 서버 에 데 이 터 를 보 냅 니 다.http 서버 와 클 라 이언 트 를 각각 소개 하 겠 습 니 다.
HTTP 서버
http.server 는 패키지 수준 이 낮은 API 를 제공 합 니 다.스 트림 제어 와 간단 한 해석 만 있 을 뿐 모든 고 층 기능 은 인 터 페 이 스 를 통 해 이 루어 져 야 합 니 다.앞의 글 인 에서 만 든 서버 처럼 매우 간단 합 니 다.http 서버 에 관 한 몇 가지 사건 을 말씀 드 리 겠 습 니 다.
1.http.server 이벤트
http.server 는 이벤트 기반 HTTP 서버 입 니 다.모든 요청 이 독립 된 이벤트 에 봉인 되 어 있 습 니 다.저 희 는 그의 이벤트 에 해당 하 는 줄 만 작성 하면 HTTP 서버 의 모든 기능 을 수행 할 수 있 습 니 다.EventEmitter에서 계승 하여 다음 과 같은 이 벤트 를 제공 합 니 다.1.request:클 라 이언 트 가 요청 할 때 이 이벤트 가 실 행 됩 니 다.두 개의 매개 변수requestresponse를 제공 하고 각각http.ServerRequesthttp.ServerResponse가 요청 과 응답 을 나타 내 는 정 보 를 제공 합 니 다.2.connection:TCP 가 연결 을 만 들 때 이 사건 이 트리거 되 고 하나의 인자socket를 제공 합 니 다.net.socket의 인 스 턴 스(바 텀 프로 토 콜 대상)3.close:서버 가 닫 혔 을 때 트리거 됩 니 다.4.그 밖 에 checkContinue,upgrade,clientError 등 사건 도 있 습 니 다.우리 가 가장 자주 사용 하 는 것 은request사건 입 니 다.http 도 이 사건 에 지름길 을 제공 했다.http.createServer([requestListener])다음은 두 가지 사례 를 간단하게 살 펴 보 자.첫 번 째 는request사건 을 사용 한 것 이다.
const http = require('http');
const net  = require('net');
const util = require('util');
//         ,     
function  a(){
    console.log("dajiahao");
}
var server = new http.Server();
server.on('request',(req,res)=>{
    console.log(req.url);
    //       
    res.writeHead(200,{'Content-Type':'text/html'});
    res.write('hello we are family
'
); res.end('server already end
'
); }); // TCP server.on('connection',()=>{ a(); }); server.on('close',()=>{ console.log('server will close'); }); // close server.close(); server.listen(8080);

다음 사례 는 http 의 지름길http.createServer로 제 작 된 코드 를 사용 합 니 다.
const http = require('http');
const net  = require('net');
const util = require('util');


http.createServer(function(req,res){
    res.writeHead(404,{'Content-Type':'text/plain'})
    res.write("we are is content");
    res.end("fdsa");

}).listen(3000);

2.http.server Requset 요청 정보
HTTP 요청 은 두 부분 으로 나 뉜 다 는 것 을 잘 알 고 있 습 니 다. 요청 한 내용 이 적 으 면 요청 헤더 프로 토 콜 이 완 료 된 후에 바로 읽 습 니 다.요청 체 는 상대 적 으로 길 고 전송 시간 이 필요 할 수 있 습 니 다.따라서 세 개의 이벤트 가 에 사 용 됩 니 다.(1)data:요청 체 데이터 가 왔 을 때 이 사건 이 촉발 되 었 습 니 다.이 사건 은 모두 하나의 매개 변수 chunk 로 받 아들 인 데 이 터 를 표시 합 니 다.(2)end:요청 체 데이터 전송 이 완료 되 었 을 때 이 사건 이 촉발 되 었 고 이후 에는 데이터 가 오지 않 을 것 입 니 다.(3)close:사용자 가 현재 요청 이 끝 났 을 때 이 사건 이 촉발 되 었 습 니 다.end 와 달리 사용자 가 강제로 전송 을 중지 하면 closeServerRequest의 속성 을 촉발 합 니 다.
명칭.
속뜻
ccomplete
클 라 이언 트 요청 이미 발송 완료 여부
httpVersion
HTTP 프로 토 콜 버 전,보통 1.0 또는 1.1
method
HTTP 요청 방법:GET,POST
url
원본 요청 경로
headers
HTTP 요청 헤더
trailers
HTTP 요청 끝(흔 하지 않 음)
connection
현재 HTTP 연결 소켓 은 net.Socket 의 인 스 턴 스 입 니 다.
socket
connection 속성의 별명
client
client 속성의 별명
http.createServer(function(req,res){
    console.log(req.httpVersion);
    //console.log(req.socket);
    console.log(req.headers);
    console.log(req.method);
    res.writeHead(404,{'Content-Type':'text/plain'})
    res.write("we are is content");
    res.end("fdsa");
}).listen(8080);

3.GET 요청 내용 가 져 오기
GET 요청 이 경로 에 직접 삽입 되 었 기 때문에 URL 의 완전한 요청 경 로 는?뒷부분 이 므 로 뒤의 내용 을 GET 의 매개 변수 로 수 동 으로 해석 할 수 있 습 니 다.Nodejs url 모듈 의 parse 함수 가 이 기능 을 제공 합 니 다.
const http = require('http');
const net  = require('net');
const url  = require('url');
const util = require('util');

http.createServer((req,res)=>{
    res.write(util.inspect(url.parse(req.url,true)));
    //  url             URL
    res.end(util.inspect(url.parse(req.url,false)));
}).listen(8080);

4.POST 요청 내용 획득
POST 가 요청 한 내용 은 모두 요청 체 에 있 습 니 다.http.server Request 는 요청 체 전송 을 기다 리 는 데 시간 이 걸 릴 수 있 기 때 문 입 니 다.예 를 들 어 파일 을 업로드 하 는 것 과 같다.악의 적 인 POST 요청 은 서버 의 자원 을 크게 소모 합 니 다.그래서 Nodejs 는 요청 체 를 해석 하지 않 습 니 다.필요 할 때 수 동 으로 해 야 합 니 다.간단하게 코드 를 보십시오.
const http = require('http');
const net  = require('net');
const url  = require('url');
const util = require('util');
//querystring    URL       
const querystring = require('querystring');

http.createServer((req,res)=>{
    var posr = '';
    req.on('data',(chunk)=>{
        post+=chunk;
    });
    res,on('end',()=>{
        //      json   
        post  =  querystring.parse(post);
        //        
        res.end(util.inspect(post));
    });
})

5.http.server Response 클 라 이언 트 정보 되 돌려 주기
사용자 가 최종 적 으로 도착 할 수 있 는 결 과 를 결정 합 니 다.http.server 의 request 이벤트 에서 보 낸 것 으로 두 번 째 매개 변수 로 전 달 됩 니 다.일반적으로 response 나 res 의 주요 세 가지 함수:response.writeHead(status Code,[headers]):요청 한 클 라 이언 트 에 응답 헤드 를 보 냅 니 다.status Code 는 200 이 성공 적 이 고 404 가 찾 을 수 없 는 등 HTTP 상태 코드 입 니 다.headers 는 관련 배열 과 유사 한 대상 으로 응답 헤드 의 모든 속성 을 표시 합 니 다.response.write(data,[encoding])는 요청 클 라 이언 트 에 해당 하 는 내용 을 보 냅 니 다.data 는 buffer 나 문자열 입 니 다.encoding 은 인 코딩 response.end([data],[encoding])로 응답 을 끝 냅 니 다.사용자 에 게 모든 발송 이 완료 되 었 음 을 알 립 니 다.돌아 갈 모든 내용 을 보 냈 을 때 , ,

좋은 웹페이지 즐겨찾기