三阶段课程——Day06(服务端与客户端:url地址、格式、域名与ip的关系;互联网传输协议之HTTP:协议分类、工作原理;Node创建服务器)


一、服务端与客户端

1. 什么是上网

通过因特网(internet)进行获取各种各样的资源(文字、图片、音频、视频,....css/js)

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

2. 享受服务的流程

1、现实生活中的服务

 

请求:一定用户主动向海底捞这里发起诉求( 鸳鸯锅、羊肉、牛肉、粉丝、生菜、虾仁 )10斤一只 ( 以后我们前端工程师要做的事情 )

处理:处理用户的诉求 (后端干的)

响应:把结果响应给客户,比如:正常的结果,没货,厨子不在,饭店未营业 (后端干的)

客户端(用户),根据响应的结果做后续的事情( 以后我们前端工程师要做的事情 )

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

请求:用户主动通过浏览器(客户端)发起网页诉求

处理/响应:把对应的文件内容返回给客户

渲染:浏览器根据服务器端返回的内容渲染在页面上。

 

3. 服务器

就是远程的一台电脑。它的配置比我们 PC(Personal Computer)的配置要高。服务器也是连网的(Internet)

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

4. 客户端

浏览器(发起诉求:请求),客户端有很多种表现形式。 app。

qq、微信(是可以打开网页)

5. url地址

5.1 基本概念

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

5.2 URL格式

 

通信协议:

http/https

http://www.ujiuye.com/

https://www.baidu.com/

服务器名称:

经常用域名来代替。

端口号:

服务器是封闭的状态 。计算机是封闭的。服务器上的文件是如何让用户拿到的,就是服务器上开放了一个口子(端口号)

我们上网一定是访问的服务器,服务器上可以有很多种服务,而这每一个服务都是不同端口开启的。并且在同一个计算机上不能有相同的两个端口 。

安装qq、安装微信

范围:1-65535 尽量不要使用3000以下的端口。因为计算机 默认的一些软件或服务用的端口比较小。

http协议端口是80。

https协议端口是443。

路径:

文件在服务上的某个地址 。是以服务器的相对地址开始找 。

参数:

是前端传递数据给服务器非常重要的一个环节。

?key1=value1&key=value2... 查询字符串参数

锚点:

url地址最后面 加 #锚点 ,是在本页面用的。锚点是不会传递到服务器的。

6. 域名与ip的关系

北京市,朝阳区,xxxx街道,朝阳北路101号,朝阳大悦城xxx几层

IP:

区分服务器就是用IP。 x,x,x,x 0-255

域名:

来更好的表示服务器。好记。 baidu.com taobao.com

DNS服务器:

Domain Name System。远程的一台电脑,存放了IP与域名的指向关系 。

 

whois查询可以看域名的信息: https://whois.chinaz.com/

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

 

二、互联网传输协议之HTTP

HTTP

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

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

1. 协议分类

1.1 现实中的协议

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

 

1.2 互联网中的传输协议

Http(HyperText Transfer Protocol):超文本传输协议 (文本、图片、视频、音频、css、js....)。

 

2. 工作原理

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

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

 

2.2 http协议的组成

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

目标:要学会用浏览器查看每一个组成部分即可。 network

http://www.ujiuye.com/zt/webqzgcs/

 

2.2.1 请求消息

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

组成:请求行、请求头部字段、请求体

请求消息格式

只有post方式的请求才有请求体

 
请求行格式

www.ujiuye.com/zt/webqzgcs/

 

2.2.2 响应消息

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

组成:状态行、响应头部、空行、响应体、

 

Date:响应时间

Content-Type:text/html 返回的数据类型描述 。服务器返回的是一个html类型格式数据(那么客户端应该把数据当作html标签来渲染)。

 

2.2.3 请求方法(方式)

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

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

 

2.2.4 状态码

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

404 Not Found 未找到

200 OK 成功

 

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

原生的写法去创建服务器。

目的:总结上面讲的理论

实际做项目:用Express框架

创建服务器步骤

需求:请求服务器的某个地址,返回hello world

//1、使用原生node中的http模块。
const http = require('http') //是一个对象
// console.log( http ); 
//2. 使用http.createServer() 函数,创建一个服务器

let server = http.createServer() //返回服务器,但是它是封闭
// console.log( server,'服务器对象' );
//3. 开启端口
server.listen( 3000 ) //兼听一个3000端口
// console.log( server.listen );

//4. 服务端兼听客户端的请求事件  使用node运行的js文件,使用了console那么是在执行命令的控制台查询。
    //修改了代码必须重新node一下。
server.on('request',function(req,res){
                            //request: req 第1个参数是请求对象
                            //response: res  第2个参数是响应对象 
    //
    res.end( 'hello world' )//向客户端响应内容,注意:必须是个字符串或二进制流
    console.log('一个用户请求了我')
})

 

 

如何访问

http://localhost:3000/
http://127.0.0.1:3000
127.0.0.1  === localhost === 访问的是你本台电脑的服务器
http://你的ip地址:3000

 

 

 

代码演示1:

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

//1、使用原生node中的http模块。
const http = require('http') //是一个对象
// console.log( http ); 
//2. 使用http.createServer() 函数,创建一个服务器

let server = http.createServer() //返回服务器,但是它是封闭
// console.log( server,'服务器对象' );
//3. 开启端口
server.listen( 3000 ) //兼听一个3000端口
// console.log( server.listen );

//4. 服务端兼听客户端的请求事件  使用node运行的js文件,使用了console那么是在执行命令的控制台查询。
    //修改了代码必须重新node一下。
server.on('request',function(req,res){
                            //request: req 第1个参数是请求对象
                            //response: res  第2个参数是响应对象 
    //告诉客户端我的内容你拿到以后应该如何处理 :通过响应头
    res.writeHead( 200,{ 'Content-type':'text/html;charset=utf8' }) //需要传递一个状态码

    // res.end( '<h2>hello world</h2>' )//向客户端响应内容,注意:必须是个字符串或二进制流
    res.end( '<h2>hello world 我是中文</h2>' )//向客户端响应内容,注意:必须是个字符串或二进制流

}) 

listen EADDRINUSE: address already in use :::3000

代码演示2:

打印请求消息。method和url

const http = require('http') //是一个对象
let server = http.createServer() 
server.listen( 3000 ) 

const qs = require('querystring')

server.on('request',function(req,res){
   
    //请求的方式和请求的路径地址
    // console.log( req.method ,'请求的方式'); //只要通过浏览器地址栏发的请求都是GET
    // console.log( req.url,'请求的路径' );

    let urlStr = '/register?username=admin&password=123'
    let urls = urlStr.split( '?' )
    // console.log( urls[1] );
    console.log( qs.parse( urls[1] ) )
    res.end('ok123')

})

 

 

代码演示3:

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

const http = require('http') //是一个对象
let server = http.createServer()
server.listen(3000)


server.on('request', function (req, res) {

    //req.url //  /login  /register
    //  /register?username=12
    // if (req.url == '/login') {
    //     res.end('login page')
    // } else if (req.url == '/register') {
    //     res.end('regsiter page')
    // }else{
    //     res.end('my is 404 page')
    // }


    if ( req.url.startsWith('/login') ) { // 判断以 /login 开头
        res.end('login page')
    } else if (req.url.startsWith('/register') ) { //判断以 /register开头
        res.end('regsiter page')
    }else{
        res.writeHead(404) //设置404 status
        res.end('my is 404 page')
    }
})

 

 

代码演示4:

根据不同路径地址返回对应html页面内容/login和/register

const http = require('http') //是一个对象
let server = http.createServer()
server.listen(3000)

//fs path
const path = require('path')
const fs = require('fs')

server.on('request', function (req, res) {

    if ( req.url.startsWith('/login') ) { // 判断以 /login 开头
        let filepath = path.join( __dirname,'views/login.html' )
        
        res.end(fs.readFileSync( filepath )) //读取内容并且返回给客户端
    } else if (req.url.startsWith('/register') ) { //判断以 /register开头
        let filepath = path.join( __dirname,'views/reg.html' )
        
        res.end(fs.readFileSync( filepath )) //读取内容并且返回给客户端
    }else{
        res.writeHead(404) //设置404 status
        res.end('my is 404 page')
    }
})
posted @ 2021-06-07 20:22  别动我咖喱  阅读(122)  评论(0编辑  收藏  举报