http协议---是浏览器和web服务器之间的通信协议
1)通用头信息
Request URL:请求的url,要向服务端请求哪个文件
Request Method:请求的方法 get/post
Status Code:响应的状态码
2** 服务器成功的响应
3** 响应的重定向,跳转到另一个网址
4** 客户端错误
5** 服务器错误
Remote Address:远程服务器的地址
Reffer Policy:进服务器的方式
2)响应头信息
Connection:连接方式 keep-alive----持续连接;
Content-Encoding:响应文件压缩形式;
Content-Type:响应的文件类型;
Transfer-Encoding:响应时的传输方式 chunked----分段传输;
Location:响应时跳转的URL,通常结合着300系列状态码;
3)请求头信息
Accept:客户端接收的文件类型有哪些;
Accept-Encoding:客户端接受的文件压缩形式;
Accept-Language:客户端接受的语言类型;
Conncetion:客户端和服务器的连接方式,持续连接;
4)请求主体
可有可无,客户端向服务器端传递数据
node.js中的HTTP模块
可以模拟浏览器向服务器端发请求,也可以创建web服务器
1)模拟浏览器
http.get(url,callback)
get-----请求的方法
url-----请求的网址
callback------回调函数,用来获取服务器端的响应
res ----响应的对象
res.statusCode------获取响应的状态码
res.on('data',(buf)=>{})
使用事件来获取服务器端响应的数据
buf是服务器端响应的数据,格式为buffer数据
例1:
// 引入http模块 const http=require('http'); // 模拟浏览器向服务器发请求 // 请求的方法和请求的url http.get('http://www.codebody.com',(res)=>{ // res是服务器端响应的内容 console.log(res.statusCode); // 查看相应的状态码 // 获取服务器端的数据 // 事件:当有数据传输的时候会执行这个事件 res.on('data',(buf)=>{ console.log(buf.toString()); }); });
例2:
// 引入http模块 const http=require('http'); // 向中国气象网提供的接口发请求 http.get('http://www.weather.com.cn/data/sk/101010100.html',(res)=>{ // 响应状态码 console.log(res.statusCode); res.on('data',(buf)=>{ console.log(buf.toString()); // 结果是json对象 }); });
2)创建web服务器
var server=http.creatServer(); 创建web服务器
server.listen(3000) 分配端口,监听3000端口的变化
server.on('request',(req,res)=>{
// 接受浏览器的请求,是一个事件,一旦有请求,自动执行
req---请求的对象
ulr 请求的路径,显示端口后的部分
method 请求的方法,直接通过地址栏默认使用get方法
headers 请求的头信息
res-----响应的对象
write() 响应的内容为本文形式,向浏览器中写入文本;
writeHead(302,{}) 设置响应的状态码和响应的头信息;如果要跳转需要设置Location属性
end() 响应结束
});
例1:无响应
/* 练习:创建web服务器,监听3001端口,使用事件监听浏览器的请求, 打印请求的方法,url; http://127.0.0.1:3001/admin/login.html http://localhost:3001/member/shopping.html */ /* 1、创建服务器 */ // 引入http模块 const http=require('http'); // 创建web服务器 var server=http.creatServer(); // 使用3000这个端口 // 监听3000的端口变化 server.listen(3001,()=>{ console.log('success'); }); /* 2、接受浏览器的请求 */ //当有请求进来事件 server.on('request',(req,res)=>{ // req---请求的对象 console.log(req.url); // 请求的路径 console.log(req.method); // 请求的方法 console.log(req.headers); // 请求的头信息 });
例2:有响应
/* 1、创建服务器 */ // 引入http模块 const http=require('http'); // 创建web服务器 var server=http.creatServer(); // 使用3000这个端口 // 监听3000的端口变化 server.listen(3000,()=>{ console.log('success'); }); /* 2、接受浏览器的请求 */ //当有请求进来事件 server.on('request',(req,res)=>{ // req---请求的对象 console.log(req.url); // 请求的路径 console.log(req.method); // 请求的方法 console.log(req.headers); // 请求的头信息 // res-----响应的对象 res.write('this is respose'); // 多个write可以响应多行文本 // 响应的重定向 res.writeHead(302,{ Location:'http://www.codebody.com' }); // 响应结束,若不加,浏览器一致等待 res.end(); });
例3:
/* 创建web服务器,监听3000端口;接收浏览器端的请求; /login 响应文本 this is login page /member this is member page / /member 如果均没有匹配的 404 not found */ /* 1、创建服务器 */ // 引入http模块 const http=require('http'); // 创建web服务器 var server=http.creatServer(); // 使用3000这个端口 // 监听3000的端口变化 server.listen(3000,()=>{ console.log('success'); }); /* 2、接受浏览器的请求 */ //当有请求进来事件 server.on('request',(req,res)=>{ // req---请求的对象 var url = req.url; // 请求的路径 // res-----响应的对象 switch(url){ case '/login': res.write('this is login page'); break; case '/member': res.write('this is member page'); break; case '/': res.writeHead(302,{ Location:'/member' }); break; default: res.write('404 not found'); } // 响应结束,若不加,浏览器一致等待 res.end(); });