HTTP|青训营

72 阅读4分钟

一、创建HTTP服务端

创建后,就可以处理浏览器所发送的请求,还可以给浏览器返回响应。

步骤:

导入http模块:

const http=require('http');

创建服务对象:

函数接收一个实参,为一个函数

回调函数在接收到http请求的时候,就会执行。

const server=http.createServer((request,response)=>{});

监听端口,启动服务:

9000是端口号,回调函数在启动成功以后才会执行。

server.listen(9000,()=>{});

浏览器可以发送HTTP请求报文的

注意事项:

1、命令行ctrl+c停止服务

2、当服务器启动后,更新代码必须重启服务才能生效。

3、响应内容中有中文

解决方法:

    //添加设置响应头解决中文乱码
    //头名 content-type  头值为第二个参数
    response.setHeader('content-type','text/html;charset=utf-8');

4、端口号被占用

方法一:把原来的端口给关了;

方法二:改一个端口号。

5、HTTP协议默认端口是80,HTTPS协议默认端口443。HTTP服务开发常用端口有3000,8080,8090,9000等。方便用户向服务器发送请求。

如果端口被气压程序占用,可以使用资源监视器找到占用端口的程序,然后使用任务管理器关闭对应的程序。

二、浏览器查看HTTP报文

打开控制台 (f12)点击网络

文件favicon.ico是谷歌默认有的,目的是获取标签页图标。

​编辑

获取HTTP请求报文:

想要获取请求的数据,需要通过request对象。

含义

语法

请求方法

request.method

请求版本

request.hattpVersion

请求路径

request.url

URL路径

request('url').parse(request.url).pathname

URL查询字符串

request('url').parse(request.url,true).query

请求头

request.headers

请求体

request.on('data',function(chunk){})

request.on('end',function(){});

获取HTTP请求报文的请求体:

加上一个html文件

//导入http模块
const http=require('http');

//创建服务对象
const server=http.createServer((request,response)=>{
    //1、声明变量 用它接收响应体的结果
    let body='';
    //2、绑定事件
    request.on('data',chunk=>{
        body+=chunk;
    })

    //3、绑定一个end事件  就是把可读流中的事件都读完了,会触发end事件
    request.on('end',()=>{
        console.log(body);
        //响应
        response.end('Hello');
    });
});

//监听端口,启动服务:
server.listen(9000,()=>{
    console.log('服务启动');
});

​编辑

注意:每一个请求只能对应一个end方法。

设置HTTP响应报文:

1.设置响应状态码

response.statusCode=203;

2.响应状态的描述

response.statusMessage='ilove';

1与2运行结果:

​编辑

3.设置响应头等例子

response.setHeader('content-type','text/html;charset=utf-8');

response.setHeader('Server','Node.js');

Server是来设置服务端的名字。

4.响应体设置

response.write('love');

一般使用write设置响应体就不再用end来在设置响应体了。

注意:每一个请求过来之后,执行回调函数,在回调函数执行过程中必须得有一个end方法,且必须只有一个end方法。

三、静态资源服务

静态资源是指内容长时间不发生改变的资源,例如图片,视频,CSS文件,JS文件,HTML文件,字体文件等。(是指在运行过程中不发生改变的)

动态资源是指内容经常更新的资源,例如百度首页,京东搜索列表页等。

搭建静态资源服务:

const http=require('http');
// 用fs模块将html文件内容读出来,然后放到end中
const fs=require('fs');

const sever=http.createServer((request,response)=>{
    let {pathname}=new URL(request.url,'http://127.0.0.1');
    //拼接文件路径  有一定的规律
    let filePath=__dirname+'/page'+pathname;
    //读取文件  fs异步
    fs.readFile(filePath,(err,data)=>{
        if(err){
            response.statusCode=500;
            response.end('文件读取失败');
            return;
        }
        response.end(data);
    })


});

sever.listen(9000,()=>{
    console.log('成功');
});

四、网站根目录与静态资源目录

HTTP服务在那个文件夹中寻找静态资源,那个文件夹就是静态资源目录,也称之为网站根目录。