Web服务器
概念:当应用程序(客户端)需要某一个资源时,可以向一个台服务器,通过Http请求获取到这个资源;提供服务的这个服务器,就是一个Web服务器
目前存在的开源服务器:Nginx、Apache(静态)、Apache Tomcat(静态、动态)、Node.js
Http模块
const http = require('http');
const HTTP_PORT = 8000;
const server = http.createServer((req, res) => {
res.end("Hello World");
});
server.listen(8000, () => {
console.log(`🚀服务器在${HTTP_PORT}启动~`)
})
创建一个Web服务器
可以通过createServer来创建一个服务器
http.createSever会返回一个服务器对象
function createSever(opts, requestListener) {
return new Server(opts, requestListener);
}
也可以自己创建这个对象:
const server2 = new http.Server((req, res) => {
res.end("Hello Server2");
});
server2.listen(9000, () => {
console.log("服务器启动成功~");
})
创建Server时会传入一个回调函数,这个回调函数在被调用时会传入两个参数
req: request请求对象,包含请求相关的信息;
res: response响应对象,包含我们发送给客户端的信息
监听端口和主机
Sever通过listen方法来开启服务器,同时在某一个主机和端口上监听网络请求:
当我们通过IP:port的方式发送到我们监听的服务器时,我们可以对其进行相关的处理
listen函数有三个参数:
端口port:可以不传,默认会分配端口;
主机host:通常传入localhost、IP地址127.0.0.1、或者ip地址0.0.0.0, 默认是0.0.0.0;
localhost:本质上是一个域名,但是会被解析成127.0.0.1
127.0.0.1:回环地址(Loop Back Address)---主机自己发出去的包,直接被自己接收
正常的数据库包经过 应用层-传输层-网络层-数据链路层-物理层
回环地址在网络层就直接被获取到了,不会经过数据链路层和物理层
我们监听127.0.0.1时,在同一个网段的不同主机中,通过ip地址是不能访问的;
0.0.0.0:
监听IPV4上的所有地址,再根据端口找到不同的应用程序
监听0.0.0.0时,在同一个网段下的主机中,通过ip地址是可以访问的;
回调函数:服务器启动成功是时的回调函数
request请求对象
向服务器发送请求时,我们可以携带很多信息,
服务器根据不同的URL进行不同的处理、请求方式的不同GET、POST、DELETE等,请求传入的参数和处理的方式是不一样的;请求头中的headers字段也可以携带一些信息,比如客户端的信息、接受数据的格式、支持的编码格式等等。
Node会帮我们封装在一个request对象中,我们可以直接来处理这个对象
const server = http.createServer((req, res) => {
// request对象
console.log(req.url);
console.log(req.method);
console.log(req.headers);
res.end("Hello World");
});
URL的处理
客户端发送请求时,会请求不同的数据,则会传入不同的请求地址;
服务器端则需要根据不同的请求地址,作出不同的响应;
Method的处理
在Restful规范(设计风格)中,我们对于数据的增删改查采用不同的请求方式
GET--查询数据 POST--新建数据 PATCH--更新数据 DELETE--删除数据
HTTP的返回状态码
常见的状态码如下:
200 - OK - 客户端请求成功
400 - bad request - 由于客户端请求有语法错误,不能被服务器所理解
401 - Unauthorized - 请求未经授权(该状态码必须与WWW-Authenticate报头域一起使用)
403 - Forbidden - 服务器收到请求,但是拒绝提供服务,服务器通常会在响应正文中给错不提供的原因
404 - Not Found - 请求的资源不存在(例:输入了错误的URL)
500 - Internal Server Error - 服务器发生不可预期的错误,导致无法完成客户端的请求
503 - Service Unavailable - 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能恢复00正常。