Node.js(四)-http协议
本篇博文简单介绍了http协议以及http模块的简单使用。
文章目录
前言
http协议是浏览器和web服务器之间的通信协议。
一、http协议
1.通用头信息
Request URL:要请求的资源
Request Method:请求的方法 get/post/put/delete…
Status Code:响应的状态码
1**:正在响应,还没有结束
2**:成功的响应
3**:响应的重定向
4**:客户端请求错误
5**:服务器错误
2.响应头信息
Location:要跳转的URL,通常会结合状态码3**使用
Content-Type:响应的内容类型 text/html/;charset=utf-8
3.请求头信息
每个HTTP请求和响应都会带有相应的头部信息。默认情况下,在发送XHR请求的同时,还会发送下列头部信息:
Accept:浏览器能够处理的内容类型
Accept-Charset:浏览器能够显示的字符集
Accept-Encoding:浏览器能够处理的压缩编码
Accept-Language:浏览器当前设置的语言
Connection:浏览器与服务器之间连接的类型
Cookie:当前页面设置的任何Cookie
Host:发出请求的页面所在的域
Referer:发出请求的页面的URL
User-Agent:浏览器的用户代理字符串
4.请求主体
只有传递数据的时候下会出现
二、NodeJs–http模块
http模块用来创建服务器,内部编写服务器端的代码,处理前端发送的请求,并且给出响应。
1.使用http模块创建web服务器
格式:
const http=require('http');//引入http模块
const app=http.createServer(); //创建WEB服务器
app.listen(8080); //设置端口号
//通过事件来接收请求
app.on('request', (req,res)=>{
req //请求的对象
req.url //获取请求的URL
req.method //获取请求的方法
res //响应的对象
res.write() //设置响应的内容
res.writeHead() //设置响应的状态码和头信息
res.end() //结束并发送响应
})
2.示例:
const http=require('http');
const app=http.createSever();//创建web服务器
app.listen(8081);//设置端口
//通过事件接受请求
//事件,一旦请求服务器自动跳转callback
app.on('request',(req,res)=>{//req请求的对象、res响应的对象
console.log('有一个人要买煎饼');//后台输出,测试
res.write('Hell NodeJs!');//设置响应的内容
res.end();//结束并发送
});
重定向跳转
res.writeHead(302,{//设置响应的状态码和头信息
Location:'http://www.baidu.com/'
});
设置404
res.writeHead(404,{//设置响应的状态码和头信息
});
res.write('404! NOT FIND!');//设置响应的内容
res.end();//结束并发送
练习
可以通过js对路由跳转以及响应信息进行设置。
练习:
创建WEB服务器,设置端口;根据请求作出对应响应
/login 响应 <h2>这是登录的网页</h2>
/index 响应 1.html文件,先同步读取文件数据,将数据作为响应的内容
/study 跳转到 http://www.tmooc.cn
其它 响应 404 Not Found
代码如下:
const http = require('http');
const file = require('fs');
const app = http.createServer();
app.listen(8082);
app.on('request', (req, res) => {
let str = req.url; //获取请求的端口信息
//Location: 'http://localhost:8082/login',
if (str === '/login') {
res.writeHead(200, {//设置响应的状态码和头信息
'Content-Type': 'text/html;charset=utf-8 '
});
res.write('<h2>这是登录的网页</h2>');
console.log(str);//测试
res.end()
} else if (str === '/index') { //Location: 'http://localhost:8082/index',
let content = file.readFileSync('./index.html').toString();
res.writeHead(200, {//设置响应的状态码和头信息
'Content-Type': 'text/html'
});
console.log(str);//测试
res.write(content);
res.end();
} else if (str === '/study') {
res.writeHead(302, {//设置响应的状态码和头信息
Location: ' http://www.baidu.com',
'Content-Type': 'text/html;charset=utf-8 '
});
console.log(str);//测试
res.end();
}
else {
res.writeHead(404, {
'Content-Type': 'text/html;charset=utf-8 '
});
res.write('<h2>404 -NOT FIND</h2>');
res.end();
}
});