美文网首页
HTTP服务器的基础知识

HTTP服务器的基础知识

作者: zhangwinwin | 来源:发表于2018-11-29 16:40 被阅读0次

    一个用“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服务器的基础知识

          本文链接:https://www.haomeiwen.com/subject/mtyfcqtx.html