
本文共 2967 字,大约阅读时间需要 9 分钟。
服务器端基础概念
网站的组成
网站应用程序主要分为客户端和服务器端两大部分。客户端运行于浏览器中,是用户与之交互的部分,采用HTML、CSS、JavaScript等技术构建。服务器端运行于服务器上,负责存储数据并处理应用逻辑,提供服务于客户端的功能。
Node网站服务器
网站服务器是接收客户端请求并做出响应的机器,能够为用户提供网站访问服务。Node.js是一种流行的服务器端框架,适合构建高性能的网络应用程序。
端口
端口是计算机系统中用于交换数据的特殊数字,可以看作是流量的唯一通道,服务器通过端口来区分不同的服务,支持并发处理多种类型的网络连接。
URL
统一资源定位符(URL)是网络中标识资源位置的编码方式。常见的URL结构包括传输协议、服务器地址、端口、文件路径和查询参数等。例如:http://www.baidu.com/25588.html。
URL组成
一般URL格式为:传输协议://服务器IP或域名:端口/资源路径
常用传输协议如HTTP、HTTPS,上述URL中“http”表示使用HTTP协议。路径和查询参数部分表示访问的资源和附加信息。创建Web服务器
使用Node.js创建简单的Web服务器,代码如下:
hi, user
'); }); app.listen(3000); console.log('服务器已启动,监听3000端口,请访问localhost:3000');该代码通过Node.js创建了一个基本的Web服务器,能够接收客户端的HTTP请求并返回简单的响应。
HTTP协议
HTTP协议的概念
超文本传输协议(HTTP)是用于客户端和服务器之间传输网页内容的协议,默认使用明文传输,基于请求-应答模式工作。
HTTP报文
HTTP请求和响应中传递数据的格式称为报文。报文包括请求方法、请求路径、加载过时版本标识、内容长度等信息,以及获取服务器支持的语言和字符编码等。响应报文则包括HTTP状态码、内容类型、服务器信息和响应数据等。
请求报文
请求报文中包含以下信息:
通过以下方式获取请求报文信息:
req.headers // 获取请求头信息req.url // 获取请求URLreq.method // 获取请求方法
响应报文
响应报文的内容通常包括:
通过以下方式设置响应报文:
res.writeHead(statusCode, { 'Content-Type': 'text/plain' });res.end(' 响应标题 ');
HTTP请求与响应处理
请求参数
客户端向服务器发送请求时,可能携带客户端信息。这些信息通常通过查询参数或请求体传递。
GET请求参数
GET请求将参数放置在URL中,例如:http://localhost:3000/?name=zhangsan&age=20
。通过URL.parse将参数解析为对象格式:
const url = require('url');const query = url.parse(req.url, true).query;console.log(query.name, query.age);
POST请求参数
POST请求将参数放置在请求体中,通过data事件和end事件获取参数:
const querystring = require('querystring');let postParams = '';req.on('data', (chunk) => { postParams += chunk;});req.on('end', () => { const parsedQuery = querystring.parse(postParams); console.log(parsedQuery);});
路由
路由是指服务器将不同请求地址与相应的处理逻辑对应起来。例如:
- http://localhost:3000/index
- http://localhost:3000/login
简单的路由实现可以通过解析请求路径来实现:
const url = require('url');const { pathname } = url.parse(req.url);if (pathname === '/' || pathname === '/index') { res.end(' 欢迎来到首页 ');} else if (pathname === '/list') { res.end('欢迎来到列表页');} else { res.end('抱歉,您访问的页面不存在');}
静态资源
服务器端可以直接响应客户端未经处理的资源文件,如图片、CSS和JavaScript文件。例如:
- stylesheets/base.css
- JavaScript/app.js
- images/logo.png
静态资源访问可以通过简单的文件读取实现:
const fs = require('fs');const path = require('path');app.use(express.static('public'));app.on('request', (req, res) => { const filePath = path.join(__dirname, 'public', req.url); fs.readFile(filePath, (error, content) => { res.end(content); });});
动态资源
动态资源在同一个请求路径下会返回不同的响应内容。例如:
- http://www.baidu.com/article?id=1
- http://www.baidu.com/article?id=2
动态资源处理需要在路径基础上添加动态参数:
app.on('request', (req, res) => { const doi = req.url.split('/article”)[1]; fs.readFile(`database/articles/${doi}`, (error, content) => { res.end(content); });});