下面是关于“Node.js中的HTTP请求与响应详解”的完整攻略。
一、HTTP请求
1.1 请求方法
HTTP请求的方法有多种,常用的有GET和POST两种方法。
- GET方法:用于请求指定的页面或资源。
- POST方法:向指定的资源提交要被处理的数据,例如提交表单。
Node.js中使用http模块发送HTTP请求,以GET和POST方法为例:
GET方法
使用http的request方法发送GET请求:
const http = require('http');
http.get('http://www.google.com/', (res) => {
console.log(`状态码: ${res.statusCode}`);
res.on('data', (chunk) => {
console.log(`响应主体: ${chunk}`);
});
res.on('end', () => {
console.log('响应中已无数据');
});
}).on('error', (e) => {
console.error(`请求遇到问题: ${e.message}`);
});
- http.get方法会返回一个http.ClientRequest对象,可以通过调用end方法来结束请求数据流。
- 当服务器响应数据时,会触发res的data事件,我们可以通过监听data事件来处理响应数据。
- 当数据读取完毕时,会触发res的end事件,我们可以在end事件中进行一些收尾工作。
POST方法
使用http的request方法发送POST请求:
const http = require('http');
const data = JSON.stringify({
name: 'John Doe',
age: 35
});
const options = {
hostname: 'localhost',
port: 3000,
path: '/submit-form',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': data.length
}
};
const req = http.request(options, (res) => {
console.log(`状态码: ${res.statusCode}`);
res.on('data', (chunk) => {
console.log(`响应主体: ${chunk}`);
});
res.on('end', () => {
console.log('响应中已无数据');
});
});
req.on('error', (e) => {
console.error(`请求遇到问题: ${e.message}`);
});
req.write(data);
req.end();
- http.request方法会返回一个http.ClientRequest对象,可以通过调用end方法来结束请求数据流。
- POST请求需要设置请求头的Content-Type为application/json,并且需要设置Content-Length为请求体长度。
- 通过req.write方法写入请求体数据。
1.2 请求头
HTTP请求中除了请求方法,还包含了请求头信息。Node.js的http模块提供了request.setHeader和request.getHeader方法来设置和获取请求头信息。以设置User-Agent请求头为例:
const http = require('http');
const options = {
hostname: 'www.google.com',
port: 80,
path: '/',
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
};
const req = http.request(options, (res) => {
console.log(`状态码: ${res.statusCode}`);
res.on('data', (chunk) => {
console.log(`响应主体: ${chunk}`);
});
res.on('end', () => {
console.log('响应中已无数据');
});
});
req.on('error', (e) => {
console.error(`请求遇到问题: ${e.message}`);
});
req.end();
1.3 请求体
除了GET方法外,其余方法均需要在请求体中处理相应数据。Node.js的http模块提供了request.write方法来写入请求体数据。以使用POST方法提交JSON数据为例:
const http = require('http');
const data = JSON.stringify({
name: 'John Doe',
age: 35
});
const options = {
hostname: 'localhost',
port: 3000,
path: '/submit-form',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': data.length
}
};
const req = http.request(options, (res) => {
console.log(`状态码: ${res.statusCode}`);
res.on('data', (chunk) => {
console.log(`响应主体: ${chunk}`);
});
res.on('end', () => {
console.log('响应中已无数据');
});
});
req.on('error', (e) => {
console.error(`请求遇到问题: ${e.message}`);
});
req.write(data);
req.end();
二、HTTP响应
Node.js的http模块用于创建HTTP服务器和客户端,也可以用于监听HTTP请求的响应。
2.1 响应状态码
HTTP协议的响应码定义了服务器对客户端请求的响应结果。常见的响应码有200、404、500等,状态码的具体含义可以参考HTTP协议规范。
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<html><body><h1>Hello, World!</h1></body></html>');
res.end();
}).listen(3000);
- 在http.createServer方法的回调函数中,通过res.writeHead方法设置响应码和响应头信息。
- 使用res.write方法写入响应主体数据。
- 使用res.end方法结束响应流,完成与客户端数据的交互。
2.2 响应头
HTTP响应还可以包含各种响应头信息,如Content-Type、Content-Length、Location等。
const http = require('http');
http.createServer((req, res) => {
res.writeHead(301, {'Location': 'http://www.google.com/'});
res.end();
}).listen(3000);
- 在http.createServer方法的回调函数中,通过res.writeHead方法设置响应码和响应头信息。
- 使用res.end方法结束响应流,完成与客户端数据的交互。
2.3 响应主体
响应主体是HTTP响应中包含的实际数据,Node.js的http模块提供了response.write和response.end方法来处理响应主体数据。
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<html><body>');
res.write('<h1>Hello, World!</h1>');
res.write('</body></html>');
res.end();
}).listen(3000);
- 在http.createServer方法的回调函数中,通过res.writeHead方法设置响应码和响应头信息。
- 使用res.write方法写入响应主体数据。
- 使用res.end方法结束响应流,完成与客户端数据的交互。
以上就是Node.js中的HTTP请求与响应的详细攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js中的HTTP请求与响应详解 - Python技术站