HTTP全稱是超文本傳輸協議,構建於TCP之上,屬於應用層協議。html
let server = http.createServer([requestListener]);
server.on('request',requestListener);
複製代碼
server.listen(port,[host],[backlog],[callback]);
server.on('listening',callback);
複製代碼
let http = require('http');
let server = http.createServer(function(req,res){
}).listen(8080,'127.0.0.1',function(){console.log('服務器端開始監聽!')});
複製代碼
server.close();
server.on('close',function(){});
複製代碼
let http = require('http');
let server = http.createServer(function(req,res){
});
server.on('close',function(){
console.log('服務器關閉');
});
server.listen(8080,'127.0.0.1',function(){
console.log('服務器端開始監聽!')
server.close();
});
複製代碼
server.on('error',function(){
if(e.code == 'EADDRINUSE'){
console.log('端口號已經被佔用!); } }); 複製代碼
let server = http.createServer(function(req,res){
});
server.on('connection',function(){
console.log(客戶端鏈接已經創建);
});
複製代碼
設置超時時間,超時後不可再複用已經創建的鏈接,須要發請求須要從新創建鏈接。默認超時時間時2分鐘緩存
server.setTimeout(msecs,callback);
server.on('timeout',function(){
console.log('鏈接已經超時');
});
複製代碼
let http = require('http');
let fs = require('fs');
let server = http.createServer(function(req,res){
if(req.url != '/favicon.ico'){
let out = fs.createWriteStream(path.join(__dirname,'request.log'));
out.write('method='+req.method);
out.write('url='+req.url);
out.write('headers='+JSON.stringify(req.headers));
out.write('httpVersion='+req.httpVersion);
}
}).listen(8080,'127.0.0.1); 複製代碼
let http = require('http');
let fs = require('fs');
let server = http.createServer(function(req,res){
let body = [];
req.on('data',function(data){
body.push(data);
});
req.on('end',function(){
let result = Buffer.concat(body);
console.log(result.toString());
});
}).listen(8080,'127.0.0.1); 複製代碼
querystring模塊用來轉換URL字符串和URL中的查詢字符串bash
querystring.parse(str,[sep],[eq],[options]);
複製代碼
querystring.stringify(obj,[sep],[eq]);
複製代碼
url.parse(urlStr,[parseQueryString]);
複製代碼
?
#
http.ServerResponse對象表示響應對象服務器
response.writeHead(statusCode,[reasonPhrase],[headers]);
複製代碼
設置、獲取和刪除Headercookie
response.setHeader('Content-Type','text/html;charset=utf-8');
response.getHeader('Content-Type');
response.removeHeader('Content-Type');
response.headersSent 判斷響應頭是否已經發送
複製代碼
判斷響應頭是否已經發送socket
let http = require('http');
let server = http.createServer(function(req,res){
console.log(resopnse.headersSent?"響應頭已經發送":"響應頭未發送!");
res.writeHead(200,'ok); console.log(resopnse.headersSent?"響應頭已經發送":"響應頭未發送!"); }); 複製代碼
不發送Date網站
res.sendDate = false;
複製代碼
能夠使用write方法發送響應內容ui
response.write(chunk,[encoding]);
response.end([chunk],[encoding]);
複製代碼
能夠使用setTimeout方法設置響應讓超時時間,若是在指定時間內不響應,則觸發timeout事件編碼
response.setTimeout(msecs,[callback]);
response.on('timeout',callback);
複製代碼
在響應對象的end方法被調用以前,若是鏈接中斷,將觸發http.ServerResponse對象的close事件url
response.on('close',callback);
複製代碼
net
onconnection
_http_server.js
鏈接監聽
connectionListenerInternal
socketOnData
onParserExecuteCommon
parserOnIncoming
複製代碼
let req = http.request(options,callback);
req.on('request',callback);
request.write(chunk,[encoding]);
request.end([chunk],[encoding]);
複製代碼
let http = require('http');
let options = {
hostname: 'localhost',
port: 8080,
path: '/',
method: 'GET'
}
let req = http.request(options, function (res) {
console.log('狀態嗎:' + res.statusCode);
console.log('響應頭:' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('響應內容', chunk);
});
});
req.end();
複製代碼
能夠使用abort方法來終止本次請求
req.abort();
複製代碼
若是請求過程當中出錯了,會觸發error事件
request.on('error',function(err){});
複製代碼
創建鏈接過程當中,爲該鏈接分配端口時,觸發socket
事件
req.on('socket',function(socket){
socket.setTimeout(1000);
socket.on('timeout',function(){req.abort()});
});
複製代碼
能夠使用get方法向服務器發送數據
http.get(options,callback);
複製代碼
能夠使用response對象的addTrailers方法在服務器響應尾部追加一個頭信息
let http = require('http');
let path = require('path');
let crypto = require('crypto');
let server = http.createServer(function (req, res) {
res.writeHead(200, {
'Transfer-Encoding': 'chunked',
'Trailer': 'Content-MD5'
});
let rs = require('fs').createReadStream(path.join(__dirname, 'msg.txt'), {
highWaterMark: 2
});
let md5 = crypto.createHash('md5');
rs.on('data', function (data) {
console.log(data);
res.write(data);
md5.update(data);
});
rs.on('end', function () {
res.addTrailers({
'Content-MD5': md5.digest('hex')
});
res.end();
});
}).listen(8080);
複製代碼
let http = require('http');
let options = {
hostname: 'localhost',
port: 8080,
path: '/',
method: 'GET'
}
let req = http.request(options, function (res) {
console.log('狀態嗎:' + res.statusCode);
console.log('響應頭:' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('響應內容', chunk);
});
res.on('end', function () {
console.log('trailer', res.trailers);
});
});
req.end();
複製代碼
let http = require('http');
let url = require('url');
let server = http.createServer(function (request, response) {
let {
path
} = url.parse(request.url);
let options = {
host: 'localhost',
port: 9090,
path: path,
headers: request.headers
}
let req = http.get(options, function (res) {
console.log(res);
response.writeHead(res.statusCode, res.headers);
res.pipe(response);
});
req.on('error', function (err) {
console.log(err);
});
request.pipe(req);
}).listen(8080);複製代碼