一.客户端与服务端
客户端的工作:
1.在浏览器地址栏输入url 点击回车
2.客户端向服务器发送了请求
3.接受html代码,渲染为网页
服务端的工作:
1.接受用户的请求,分析用户的url,清楚客户端需要的资源
2.调用服务端的程序,处理请求,找到用户需要的资源
3.创建数据库,数据库内的增删改查,将数据库操作的结果返回应用程序
4.服务器端将操作结果转化为html代码发送给客户端
二.应用软件
1.Apache(音译为【阿帕奇】)是世界使用第一的web服务器,
2.Nginx是一款【轻量级】的web服务器
3.MySQL 是一个【关系型数据库管理系统】
4.Node既是平台也是编程语言
三.互联网协议的分类
http协议:超文本传输协议
ftp协议:文件传输协议,客户端通过FTP协议访问位于FTP服务器撒谎那个的资源,由于FTP传输效率非常高,在网络上上传输大的文件的时候,一般也采用该协议(使用了断点续传)
smtp协议:电子邮件传输协议
http协议的版本
http 1.0 :增加了请求头与响应头,用来描述请求与相应的基本信息。客户端除了GET,新添加了POST和HEAD方法。在线服务器不仅仅可以相应HTML文件,还支持图片、视频、二进制文件等数据。发送相应时需要使用content-type来描述数据格式。浏览器会按照content-type指定的类型来渲染页面
缺陷:只能同时进行一个线程
http1.1 :默认开启了持续连接(keep-alive),解决了1.0版本的TCP连接使用效率不高的问题。
添加了PUT,PATCH,OPTIONS,DELETE方法,可用于设计RestFul风格的路由
缺陷:只能按照请求的顺序响应,当碰到大量请求的时候,容易造成网络堵塞。问了解决这个问题,人们发明了很多网络优化技巧:精灵图,合并css,合并js,都是为了减少请求的次数。
http2.0 : 更加安全,高效。网页的压缩传输,加密协议,流技术,复合多用等。
http协议的特点
1.简单,快速
2.灵活,可以传输系统中多种类型的文件。例如:jpg,gif,png,doc,rar,pdf...
3.无状态,无连接。http协议不能记忆用户的各种状态。例如用户的登录状态,邮箱,订单信息....,因此人们又发明了cookie,session等技术帮助数显记忆用户状态的功能,无连接只服务完成后,会自动断开连接,释放资源。
四.请求与相应
1.请求:地址栏输入url,浏览器在解析html是碰到了src属性,link的herf属性时,ajax请求,表单提交等
1.请求行:请求方法,url,扎UN固态吗,http版本
2.请求头:一堆字符串,但是类似于对象的键值对,键值对用冒号隔开,每行回车隔开
3.请求体:只有表单以post方法提交时,表单中的数据就包含在请求体中
请求头中的内容:
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: BIDUPSID=9C87FFF139EDF2BC4E3487A0B6596E71; PSTM=1554519058; BAIDUID=070D52EFBC1572770FC36F9E165BCCF4:FG=1; BD_UPN=13314752; BD_HOME=1; H_PS_PSSID=34132_34099_34043_31254_34004_33676_33607_26350; BA_HECTOR=2k80ag0h24a1a4a1uc1gcgglj0r
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
2.响应 :鼓舞短每一次请求后,都要有响应:
1.状态行:包含http协议版本,扎UN固态吗,状态码的描述
2.响应头:也是一堆键值对形式的字符串,包含了很多信息。例如:content-type,浏览器必须知道content-type才能正确渲染页面
3.响应体:服务器响应给客户端的内容。
五.状态码与状态码的描述
定义:状态码有三位数字组成,每一个数字都定义了相应的类型,共分为五类:
1xx : 指示信息--表示请求已接受,继续处理
2xx : 成功接收
3xx : 重定向--需完成请求,必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或者请求无法实现
5xx :服务器端错误--服务器未能实现合法的请求
常见状态码:
200 ok 客户端请求成功
400 Bad Request 客户端请求语法错误,不能被服务器所理解
401 Unauthorized 请求未经授权,这个状态码必须和www-Authenticate报头域一起使用
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 Not Found 请求资源不存在 。
500 Internal Server Error 服务器发生了不可预期的错误
503 Server Unavaiable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常
六.使用node创建一个http服务
let http = require('http');
let fs = require('fs');
let sum = 0;
let server = http.createServer((request,response)=>{
console.log(request.url);
sum++;
if(request.url == '/'){
let data = fs.readFileSync('./index.html');
response.end(data.toString());
}
})
//启动http监听服务
//端口号:范围0~60000,一个web服务器上如果只挂载一个网站有些资源浪费,可以指定不同的端口号费别对应不同的网站。
server.listen(3000,()=>{
console.log('http服务已启动在3000端口');
})
七.node的顶层路由
url到函数的映射。开发人员实现设置好的url的字符串,当用户按照知道那个的url访问时可以得到特定的服务。
优点:安全,简洁
缺点:都区资源是不方便,必须要自己配程序实现。