node.js里面的HTTP服务器

1:HTTP服务器

1.首先,让我们先来了解一下http。

HTTP是一个用来进行传送内容和应用程序的应用层协议,它将TCP用作传输协议,并且是万维网进行数据通信的基础。首选的应用程序部署方案之一就是在互联网上提供HTTP服务,来响应HTTP客户端的请求。

2.那么如何在node中创建服务器呢?

var http=require("http");
var server=http.createServer();
server.on("request",function(req,res){
    res.writeHead(200,{"Content-type":"text/plain"});
    res.write("hello world!");
    res.end();
});
server.listen(4000);

然后,将上述脚本保存为server.js并运行,如下所示:

$  node server.js

接着将浏览器转向http://localhost:4000,此时应该能看到”Hello World!”字符串显示在浏览器上。
当然上面的可以被简写为下面的程序:

require("http").createServer(function(req,res){
    res.writeHead(200,{"Content-type":"text/plain"});
    res.end("hello world!");
}).listen(4000);

3:理解http.ServerRequest对象

在监听request事件时,回调函数会得到一个http.ServerRequest对象作为第一个参数,这个对象包含一些属性,可以查看这些属性,这些属性包括url,method以及headers

(1)req.url:该属性包含一个字符串型的请求URL。它不包含模式,主机名或者端口,但包括URL中在上述内容之后的所有剩余部分,试着运行如下所示的服务器来分析request属性:

require("http").createServer(function(req,res){
    res.writeHead(200,{"Content-type":"text/plain"});
    res.end(req.url);
}).listen(4000);

用浏览器打开http://127.0.0.1:4000/abc,可以看到浏览器上输出的是/abc

(2)req.method:该属性包含在请求上用到的HTTP方法,例如,它有可能是GET,POST,DELETE或者HEAD。

(3)req.headers:该属性包含一个对象,这个对象拥有请求上所有的HTTP头,为了分析该属性,可以运行如下所示的服务器

var util=require("util");
require("http").createServer(function(req,res){
    res.writeHead(200,{"Content-type":"text/plain"});
    res.end(util.inspect(req.headers));
}).listen(4000);

将浏览器连接到http://127.0.0.1:4000来查看请求头,看以看到浏览器上输出这么一段信息:

{ host: '127.0.0.1:4000',
  connection: 'keep-alive',
  'cache-control': 'max-age=0',
  accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  'upgrade-insecure-requests': '1',
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.108 Safari/537.36 2345Explorer/8.3.1.14600',
  'accept-encoding': 'gzip, deflate',
  'accept-language': 'zh-CN,zh;q=0.8' }

在上面的代码中用到了util.inspect(),它是一个可以分析对象任意属性的使用函数。

header对象的键是小写的,例如,如果浏览器发送了一个请求头”Cache-Control:max-age=0”,则req.headers就会具有一个属性”cache-control”,该属性的值是”max-age=0”,值不会受到影响。

当在服务器上得到request事件时,并不会立即获得请求体,这只是因为请求体还没有到达。但因为request对象是可读流,所以只要你想,就可以监听data事件,或者将请求体传送到一个可写流中。

4:理解HTTP.ServerResponse对象

为了写入响应头,可以使用res.writeHead(status,headers)函数,其中headers是一个可选参数,它是一个包含所有想要发送的响应头属性的对象。

require("http").createServer(function(req,res){
    res.writeHead(200,{
        "Content-type":"text/plain",
        "Cache-Control":"max-age=0=3600"
    });
    res.end("Hello world!");
}).listen(4000);

运行之后,我们可以在浏览器内打开控制台查看响应头。

5:修改或设置响应头

res.setHead(name,value);

上面的语句只有在还没有用res.write()或者res.end()发送响应主体时才会起作用,如果已经在响应对象上使用了res.writeHead(),上述语句也不会起作用,这是因为响应头已经被发送出去了。

6:删除响应头

res.removeHeader("Cache-Control");

再次提醒,上面的语句只会在响应头还未被发送出去时起作用。

7:写入一块响应主体

HTTP服务器会在发送响应头之后发送响应主体,有两种写入响应主体的方法,一是写入一个字符串:
res.write("hello");
另一种是使用已存在的缓冲区:

var buffer=new Buffer("hello world");
res.write(buffer);

今日博客写到这里,明天继续http服务器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值