HTTP服务器的基础知识

一个用“Hello, World”做响应的HTTP服务器

var http  = require('http')
var server = http.creareServer(function (req,res){
    res.write('hello,world')
    res.end()
})

res.write()和res.end()可以合成一条语句:res.end("Hello, world")
然后绑定一个端口,让服务器可以监听接入的请求。用到server.listen()方法,它能接受一个参数组合

server.listen(3000)

让node监听了端口3000,可以在浏览器中访问http://localhost:3000。就能看到Hello,world的普通文本页面。

读取请求头及设定响应头

Node提供了几个修改HTTP响应头的方法:
1、res.setHeader(field, value)
2、res.getHeader(field, value)
3、res.removeHeader(field, value)

设定HTTP响应码:res.statusCode()

资源

当Node的HTTP解析器读入并解析请求数据时,它会将数据做成data事件的形式,把解析好的数据放入其中,等待程序处理

req.on('data', function(chunk){
    console.log('parsed', chunk)
    res.end()
})

默认情况下,data事件会提供Buffer对象,这是node版的字节数组。而对于文本格式的代办事项而言,并不需要二进制数据,所以最好将流编码设定为ascill或utf-8。可以调用req.setEncoding(encoding)方法设定

设定Content-Length头

为了提高速度,如果可能的话,应该在响应中带着Content-Length域一起发送。对于事项清单而言,响应主体很容易在内存中提前构建好,所以能得到字符串的长度并一次性地将整个清单发出去。设定Content-Length域会隐含禁用Node的块编码,因为要传输的数据更少,所以能提高性能。

res.serHeader('Content-Length': Buffer.byteLength(body))

解析客户端请求的URL

Node提供了url模块,特别是.parse()函数。

request('url').parse('http://localhost:3000/1?api-key=foobar')
{    protocol: 'http',
     slashes: true,
     host: 'localhost: 3000',
     port: '3000',
     hostname: 'localhost',
     href: 'http://localhost:3000/1?api-key=foobar',
     search: '?api-key=foobar',
     query: 'api-key=foobar',
     pathname: '/1',
     path: '/1?api-key=foobar'
}

你可能感兴趣的:(HTTP服务器的基础知识)