node.js(2)

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();

});
原文地址:https://www.cnblogs.com/hd-test/p/11855031.html