Home  >  Article  >  Web Front-end  >  Analysis of the Http module of Nodejs

Analysis of the Http module of Nodejs

不言
不言Original
2018-06-30 15:28:161303browse

This article mainly introduces the analysis of the Http module of Nodejs. It has a certain reference value. Now I share it with you. Friends in need can refer to it.

We know that the traditional HTTP server is composed of It is built with software such as Aphche, Nginx, IIS, etc., but Nodejs does not need it. Nodejs provides the http module, which can be used to build the server. This article will introduce the Http module of Nodejs to you. Friends who need it can refer to it. Bar

1. http server

We know that traditional HTTP servers are built by software such as Aphche, Nginx, and IIS. But Nodejs does not need it. Nodejs provides an http module, which can be used to build a server. For example:

var http = require("http");
http.createServer(function(req,res) {
 res.writeHead(200,{
  "content-type":"text/plain"
 });
 res.write("Hello NodeJs");
 res.end();
}).listen(3000);

The http module encapsulates an HTTP server and A simple HTTP client: http.Server() is used to create an event-based HTTP server, and http.request() and http.get() can serve as clients to initiate requests to the HTTP server. The createServer() method used here returns an http.Server object. text/plain means to set the file to plain text format. The browser will not process such a file when it obtains it. If content is -type is set to text/html. When the browser obtains this kind of file, it will automatically call the HTML parser to process the file accordingly. In addition, you can also use the new http.Server() constructor method to create an http.Server object, for example:

var http = require("http");
var server = new http.Server();
server.on("request",function(req,res) {
  ...
}).listen(3000);

The above code is to directly create an http. .Server object, and then add a request event listener to it. The http.Server object created using the createServer() method adds a request event listener by default, but it is omitted.

The events of http.Server are mentioned above. The most commonly used event of http.Server is "request", which is triggered when an http request is received. In the "request" event, the parameters req and res passed into the callback function are instances of http.IncomingMessage and http.ServerResponse respectively:

http.IncomingMessage class contains the http request information sent from the client, It can be used to access response status, message headers, and data, etc., for example:

*headers/<object> - 请求头或响应头的对象
*httpVersion/<string> - http协议版本,可能的值有"1.1"或"1.0"
*method/<string> - 请求的方法,例如"GET"、"POST"等
*statusCode/<number> - http响应状态码
*statusMessage/<string> - http响应状态消息
*url/<string> - 发送http请求的客户端的url

http.ServerResponse class is the information returned to the client, It has three important methods for returning response headers, response content and ending the request:

writeHead(statusCode[, statusMessage][,headers]): Send response headers to the requesting client. This function is in Called at most once in a request. If not called, a response header will be automatically generated

write(chunk[,encoding][,callback]): Send response content to the requesting client, chunk is a buffer Or a string. If chunk is a string, you need to specify the encoding method. The default is utf-8. You can call

end([data ][,encoding][,callback]): End response, inform the client that all sending has ended. If this function is not called, the client will always be in a waiting state.

For other http.Server class events, please refer to Official document: http://nodejs.cn/api/http.html

2. http clienthttp module provides http The two methods .request() and http.get() function as a client to initiate requests to the http server.

http.request(options[,callback])方法
http.request()方法返回一个http.ClientRequest的实例。其中,options是一个对象,表示请求的参数。包括:
*protocol/<string> - 使用的协议,默认为http
*host/<string> - 请求发送至的服务器的域名或 IP 地址,默认为"localhost"
*hostname/<string> - host的别名
*port/<number> - 远程服务器的端口号,默认为80
*method/<string> - 指定http请求方法,默认为"GET"
*path/<string> - 请求相对于根的路径,默认是"/",QueryString应该包含在其中。例如:/index.html?page=12
*headers/<object> - 包含请求头的对象
*timeout/<number> - 它设置了 socket 等待连接的超时时间

For example:

var http = require("http");
var querystring = require("querystring");
var postData = querystring.stringify({
  "content":"测试一下",
  "mid":8837
});
var options = {
  hostname:"www.imooc.com",
  port:80,
  path:"/course/document",
  method:"POST",
  headers:{
    "Accept":"application/json, text/javascript, */*; q=0.01",
    "Accept-Encoding":"gzip, deflate",
    "Accept-Language":"zh-CN,zh;q=0.8",
    "Connection":"keep-alive",
    "Content-Length":postData.length,
    "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
    "Cookie":"",
    "Host":"www.imooc.com",
    "Origin":"http://www.imooc.com",
    "Referer":"http://www.imooc.com/video/8837",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2763.0 Safari/537.36",
    "X-Requested-With":"XMLHttpRequest",
  }
}
var req = http.request(options,function(res){
  res.on("data",function(chunk){
    console.log(chunk);
  });
  res.on("end",function(){
    console.log("完毕!");
  });
  console.log(res.statusCode);
});
req.on("error",function(err){
  console.log(err.message);
})
req.write(postData);
req.end();

If any error is encountered during the request, then The "error" event will be triggered in the returned request object;

Using http.request() must always call req.end() to indicate the end of the request, even if no data is written to the body

http.get(options[,callback]) method


http.get() method is a simplified version of http.request() method. The main difference is that http.get() automatically The request method is set to "GET" request, and there is no need to manually call req.end()

The above is the entire content of this article. I hope it will be helpful to everyone's learning. For more related content, please pay attention to the PHP Chinese website !

Related recommendations:

Introduction to the use of the Request module in Node.js to handle HTTP protocol requests


The cluster module in Node Learning


The above is the detailed content of Analysis of the Http module of Nodejs. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn