1.发送HTTP响应头信息response.writeHead(statusCode,[reasonPhrase],[headers])statusCode:参数用于指定一个三位数的HTTP状态码reasonPhrase:参数值为字符串,用于指定状态码描述信息headers:是用来指定服务器创建的响应头对象的对象。content-type:用于指定内容类型location:用于将客户端重定向到另一个url地址content-disposition:用于指定下载的文件名content-length:用于指定服务器端响应内容的编码格式set-cookie:用于在客户端创建cookiecontent-encoding:用于指定服务器端响应内容的编码方式Cache-Control:用于启用缓存机制Expires:用于指定缓存过期时间Etag:用于指定在服务器端响应内容没有改变时,不会重新下载数据。单独设置响应头信息。可以使用http.ServerResponse对象的setHeader方法单独设置响应头信息。*`response.setHeader(name,value)`*`res.setHeader('Content-Type','text/type');`获取响应头中某个字段的值response.getHeader(name);res.getHeader('内容类型');删除响应字段response.removeHeader(name);res.removeHeader('内容类型');检测响应头是否已经发送response.headersSent();hasbeensent,istruebutnotsent,isfalseDate字段默认情况下,HTTP服务器会自动将服务器端的当前时间作为响应头中的Date字段值发送给客户端。您可以通过将res.sendDate属性值设置为false来删除响应标头中的日期字段res。发送日期=假;简单的HTTP服务器consthttp=require('http');letserver=http.createServer(function(req,res){if(req.url!=='/favicon.ico'){res.write('');res.sendDate=false;//不发送时间if(res.headersSent){console.log('第一个响应头已经发送');}else{console.log('第一响应头未发送');}res.writeHead(200,{'Content-Type':'text/html'});if(res.headersSent){console.log('第二个响应头已经发送');}else{console.log('第二个响应头没有发送');}res.write('你好,这是http服务器响应内容');}res.end();}).listen(2596,'localhost',function(){console.log('http服务器运行在localhost:3333')});在响应数据的末尾添加一个头res.addTrailers(headers)consthttp=require('http');letserver=http.createServer(function(req,res){if(req.url!=='/favicon.ico'){res.writeHead(200,{'Content-Type':'text/plain','Trailer':'Content-MD5'});res.addTrailers({'Content-MD5':'5Q8W9XS5AS98ZX2X5V8V3ZX3ZA8'});res.write('你好,这是一些新的按摩');}res.end();}).listen(3333,'localhost',function(){console.log('http服务器运行在localhost:3333')});2.创建HTTP服务器consthttp=require('http');constfs=require('fs');constPORT=2596;letserver=http.createServer((req,res)=>{if(req.url!=='/favicon.ico'){letout=fs.createWriteStream('./requestCurl.log');out.write('客户端请求的方法是:'+req.method+'\r\n');out.write('客户端请求的url字符串是:'+req.url+'\r\n');out.write('客户端请求的header对象是:'+JSON.stringify(req.headers)+'\r\n');out.write('客户端请求使用的HTTP版本为:'+req.httpVersion+'\r\n');req.on('data',function(data){console.log('服务器收到数据:'+data);});req.on('end',()=>{console.log('客户端请求数据已收到');})}res.end();}).listen(PORT,'localhost');server.on('listening',()=>{console.log(`serverstartlistenlocalhost:${PORT}`);});server.on('connection',(socket)=>{console.log('clientandserverhadbeenconnected');});setTimeout(10*1000,(socket)=>{console.log('serverresponsetimeout');});server.on('error',(err)=>{if(e.code==='EADDRINUSE'){console.log('端口已被占用,请更改服务器端口');}server.on('close',()=>{console.log('serverclosed');});});/****客户端请求方式为:GET*客户端请求的url字符串为:/*客户端请求头对象为:{"user-agent":"curl/7.29.0","host":"localhost:2596","accept":"*|*"}*客户端请求使用的HTTP版本为:1.1**/3。创建HTTP客户端当客户端请求获取服务器响应流时,触发res.on('data',(chunk)=>{})eventconsthttp=require('http');letoptions={hostname:'www.qq.com',port:80,path:'/',method:'GET'};letreq=http.request(options,(res)=>{console.log(`statuscode:${res.statusCode}`);console.log(`responseheader:${JSON.stringify(res.headers)}`);res.setEncoding('utf8');res.on('data',(chunk)=>{console.log(`响应内容:`);})});req.on('response',(res)=>{console.log(res);//IncomingMessage});req.on('error',(err)=>{if(err.code==='ECONNRESET'){console.log('socketporttimeout');}else{console.log('onrequest数据处理过程中发生错误,错误码为:'+err.code)}});req.end();/***状态码:200*响应头:{*"server":"squid/3.5.24",*"date":"Sun,25Feb201814:09:11GMT",*"content-type":"text/html;charset=GB2312",*"transfer-encoding":"chunked",*"connection":"close",*"vary":"Accept-Encoding,Accept-编码,接受编码,接受编码”,*“到期”:“星期日,2018年2月25日14:10:11GMT”,*“缓存控制”:“最大年龄=60”,*“x-缓存":"HIT来自深圳.qq.com"*}****/