一、http服务器
我们知道传统的HTTP服务器是由Aphche、Nginx、IIS之类的软件来搭建的,但是Nodejs并不需要,Nodejs提供了http模块,自身就可以用来构建服务器,例如:
http模块中封装了一个HTTP服务器和一个简易的HTTP客户端:http.Server()用于创建是一个基于事件的HTTP服务器,而http.request()和http.get()可以作为客户端向HTTP服务器发起请求。在这里使用的createServer()方法返回了一个http.Server对象,text/plain的意思是将文件设置为纯文本格式,浏览器在获取到这种文件时并不会对其进行处理,如果将content-type设置为text/html,浏览器在获取到这种文件时会自动调用HTML的解析器对文件进行相应的处理。另外,也可以用new http.Server()构造函数的方法创建http.Server对象,例如:
以上代码是通过直接创建一个http.Server对象,然后为其添加request事件监听。使用createServer()方法创建的http.Server对象默认添加了一个request事件监听,但是省略了。
上面说到了http.Server的事件,http.Server最常用的事件是"request",当接收到http请求时触发。在"request"事件中,传入回调函数的参数req和res分别是http.IncomingMessage和http.ServerResponse的实例:
http.IncomingMessage类包含了从客户端发来的http请求信息,它可以用来访问响应状态、消息头、以及数据等,例如:
http.ServerResponse类是返回给客户端的信息,它有三个重要的方法,用于返回响应头、响应内容以及结束请求:
writeHead(statusCode[,statusMessage][,headers]):向请求的客户端发送响应头,该函数在一个请求中最多调用一次,如果不调用,则会自动生成一个响应头
write(chunk[,encoding][,callback]):向请求的客户端发送响应内容,chunk是一个buffer或者字符串,如果chunk是字符串,则需要指定编
码方式,默认为utf-8,在end()方法调用之前可以多次调用
end([data][,callback]):结束响应,告知客户端所有发送已经结束,如果不调用这个函数,客户端将一直处于等待状态
其他http.Server类的事件可以参考官方文档:nofollow" href="http://nodejs.cn/api/http.html">http://nodejs.cn/api/http.html
二、http客户端
http模块提供了http.request()和http.get()两个方法,功能是作为客户端向http服务器发起请求。