Nodejs-day03 服务器与客户端

一、服务端与客户端

1.1. 什么是上网

通过客户端代理工具来访问因特网(internet)进行获取各种各样的资源(文字、图片、音频、视频,....css/js)

获取资源的过程就也就是享受服务的过程 。

1.2 享受服务的流程

1、现实生活中的服务

请求:

处理:

响应:

2、互联网上的服务(客户端与服务器端的一次请求流程)

请求(request):用户通过客户端代理工具(浏览器)向服务器发起要请求的资源

处理:服务端启动对应的应用程序对用户的请求进行处理

响应(response):服务端处理完用户的请求之后将对应的数据返回给客户端。

1.3. 服务器

互联网上的各种主机(服务器),这些主机提供各种资源的。

举例:CTS服务器、优就业官网、中公教育服务器、淘宝www.taobao.com、百度www.baidu.com、腾讯www.qq.com

1.4 客户端

代理用户访问互联网上主机的工具(浏览器是常见客户端之一)。

1.5 url地址

1.5.1 基本概念

简单来说就是网址。URL(全称是Uniform Resource Locator)中文叫统一资源定位符,用于标识互联网上每个资源的唯一存放位置。浏览器只有通过URL地址,才能正确定位资源的存放位置,从而成功访问到对应的资源。

1.5.2 URL【重点】

1.5.2.1 通信协议

计算机与计算机之间通信的标准。

1.5.2.2 服务器名称

表示用户要访问互联网上的哪台主机。

1.5.2.3 端口号【重点】

计算机是一个封闭的空间,通过不同的端口来访问计算机内部不同的应用程序,这个端口号可以理解成一家饭店或超市的大门口,计算机的端口号有0至65535个,但是小于1024的端口被计算机常见服务所占用。

1.5.2.4 路径

通过路径来访问不同的资源。

1.5.2.5 参数

实现人机交互的。

1.6 域名与ip的关系

1.6.1 IP

IP是一串数字,用来表示网络上某台主机的地址,早期在访问互联上的主机时都使用ip来访问,随着互联网上的主机越来越多时用户要记的IP数字也越来越多,但人们普遍对数字不敏感,后来就使用域名来访问互联网上的主机。

1.6.2域名

域名与IP之间的关系?【重点】

在使用ip地址来访问网络上的主机时不便于记忆,因为ip地址是一串数字,所以后来人们使用域名来代替ip来访问网络上的主机,但要域名则先要进行域名解析(将某个域名绑定到指定的服务器ip地址上,然后将这个绑定信息记录DNS服务器上),因此一个域名对应一个ip地址,但同一个ip地址可以绑定到多个不同的域名上。

1.6.3 DNS服务器

DNS(Domain Name Server:域名服务器):用来记录域名与IP的绑定信息。

whois查询可以看域名的信息: 域名Whois查询 - 站长之家

cmd快速查看域名和ip的指向: ping 域名 (查看此域名通不通)

二、互联网传输协议

什么是协议:协议( Protocol)是指双方为了完成一个目标结果所必须遵守的规则和约定。

通俗的理解:双方采用约定好的格式来做某种事情,这种事先约定好的格式,就叫做协议。

2.1 协议分类

2.1.1 现实中的协议

邮寄规则:寄件人信息、收件人信息

2.1.2 互联网中的传输协议

什么是HTTP协议?【重点】

Http(HyperText Transfer Protocol):超文本传输协议 (文本、图片、视频、音频、css、js....),它是基于请求/响应模式、应用层(参考TCP/IP)、无状态(http协议没有记忆功能)的协议。

http与https[secure:安全的]的区别?【重点】

https协议是加密传输数据、相对安全;

http协议是明文传数据、相对不安全;

2.2 工作原理

http协议通信过程(原理)?【重点】

第一步:客户端与服务器建立连接;

第二步:客户端发请求给服务器;

第三步:服务器接收、处理请求并返回响应;

第四步:客户端与服务器自动断开连接;

2.2.1 交互模型(请求与响应)

交互模型(请求与响应):HTTP 协议采用了 请求/响应 的交互模型。也就是说必须是客户端主动发起请求,再由服务器端处理请求,同时被动的把内容响应给客户端

2.2.2 http协议的组成

请求消息、响应消息、请求方法、状态码

2.2.2.1 请求消息

描述:客户端发起的请求叫做 HTTP 请求,客户端发送到服务器的消息,叫做 HTTP 请求消息(又叫做 HTTP 请求报文。) 简单来说就是客户端告知服务器我要干什么。

http请求由三部分组成:请求行、请求头部、请求体(可以为空)【重点】

其中请求行也由三部分组成:请求方式(get/post)、请求资源、http协议版本

2.2.2.2 响应消息

描述:响应消息就是服务器响应给客户端的消息内容,也叫作响应报文。比如:海底捞服务员把后厨准备好的食材交付给用户

响应由三部分组成:状态行、响应头部、空行、响应体 【重点】

状态行由三部分组成:协议版本、状态码、描述信息

2.2.2.3 请求方法

用来表明要对服务器上的资源执行的某操作,以何种方式进行请求。

常见请求方法比如:get获取/post提交数据/delete删除/put更新的

get与post的区别?【重点】

get是显式提交,相对不安全,参数长度有限制

post是隐匿提交,相对安全,参数长没有限制

2.2.2.4 http常见的状态码【重点】

用来标识响应的状态。服务器的结果要用状态码来进行描述。比如:404页面不存在。200成功

2XX:表示成功

200 客户端与服务器交互成功

3XX:表示重定向

301 永久重定向

302 临时重定向

4XX:表示客户端错误

404:页面找不到(可以是用户把路径或文件名写错了)

5XX:表示服务器错误

500:服务器内部错误

502:网关错误

三、Node创建web服务器(了解)

web:网站

创建服务器步骤

const http = require('http');
// console.log(http);
​
//创建服务器
const server = http.createServer();
// console.log(server);
​
//监听事件:server.on('事件名',回调方法)
//requst:请求
//response:响应
server.on('request', function(req, res) {
    res.end('Hi Tom...'); //end()方法必须且只能使用一次
});
​
​
//监听端口:
server.listen(3000, () => {
    console.log('web服务器工作在3000端口');
});

代码演示1:

设置响应头信息。res.writeHead(200,{'Content-Type':"text/html;charset=utf8"})

const http = require('http');
// console.log(http);
​
//创建服务器
const server = http.createServer();
// console.log(server);
​
//监听事件:server.on('事件名',回调方法)
//requst:请求
//response:响应
server.on('request', function(req, res) {
    // console.log(req, res, 999);
​
    //设置响应的头信息:
    // res.setHeader('content-type', 'text/html;charset=utf-8');
    res.writeHead(200, 'OK', { 'content-type': 'text/html;charset=utf-8' });
​
    res.write(`<p><strong>大家好!</strong></p>`); //res.write():用来设置响应的内容,可以多次使用
    res.write(`<div><i>this is Demo...</i></div>`);
​
    //res.end('Hello Browser!!!'); //结束响应
    res.end('Hi Tom...'); //end()方法必须且只能使用一次
});
​
​
//监听端口:
server.listen(3000, () => {
    console.log('web服务器工作在3000端口');
});

代码演示2:

打印请求消息。method和url

const http = require('http');
​
//创建服务器
const server = http.createServer();
​
//监听事件:
server.on('request', (req, res) => {
    let curUrl = req.url; //获取用户请求的路径
​
    res.setHeader('content-type', 'text/html;charset=utf-8');
    if (curUrl.startsWith('/teacher')) {
        res.write('<p>这是老师的界面</p>');
    } else if (curUrl.startsWith('/student')) {
        res.write('<div><strong>这是学生的界面</strong></div>');
    } else {
        res.write('<div>其他界面</div>');
    }
​
    res.end();
});
​
​
//监听端口:
server.listen(3000, () => {
    console.log('3000端口');
});

代码演示3:

根据不同路径地址返回不同消息。/login和/register

const http = require('http');
​
//创建服务器
const server = http.createServer();
​
//监听事件:
server.on('request', (req, res) => {
    let curUrl = req.url; //获取用户请求的路径
​
    res.setHeader('content-type', 'text/html;charset=utf-8');
    if (curUrl.startsWith('/teacher')) {
        res.write('<p>这是老师的界面</p>');
    } else if (curUrl.startsWith('/student')) {
        res.write('<div><strong>这是学生的界面</strong></div>');
    } else {
        res.write('<div>其他界面</div>');
    }
​
    res.end();
});
​
​
//监听端口:
server.listen(3000, () => {
    console.log('3000端口');
});
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值