3. HTTP协定
3.1 HTTP协定的概念
超文本传输协定(英文:HyperText Transfer Protocol,缩写:HTTP)规定了如何从网站服务器传输超文本到本地浏览器,它基于客户端服务器架构工作,是客户端(用户)和服务器端(网站)申请和应答的规范。
3.2 报文
在HTTP申请和响应的过程中传递的数据块就叫报文,包含要传送的数据和一些附加信息,并且要恪守规定好的格局。
3.3 申请报文
1. 申请形式 (Request Method)
- GET 申请数据
- POST 发送数据
2. 申请地址 (Request URL)
app.on('request', (req, res) => {
req.headers // 获取申请报文
req.url // 获取申请地址
req.method // 获取申请办法
});
3.4 响应报文
1. HTTP状态码
- 200 申请胜利
- 404 申请的资源没有被找到
- 500 服务器端谬误
- 400 客户端申请有语法错误
2. 内容类型
- text/html
- text/css
- application/javascript
- image/jpeg
- application/json
app.on('request', (req, res) => {
// 设置响应报文
res.writeHead(200, {
'Content-Type': 'text/html;charset=utf8'
});
});
4. HTTP申请与响应解决
4.1 申请参数
客户端向服务器端发送申请时,有时须要携带一些客户信息,客户信息须要通过申请参数的模式传递到服务器端,比方登录操作。
4.2 GET申请参数
- 参数被搁置在浏览器地址栏中,例如:http://localhost:3000/?name=z…
- 参数获取须要借助零碎模块url,url模块用来解决url地址
const http = require('http');
// 导入url零碎模块 用于解决url地址
const url = require('url');
const app = http.createServer();
app.on('request', (req, res) => {
// 将url门路的各个局部解析进去并返回对象
// true 代表将参数解析为对象格局
let {query} = url.parse(req.url, true);
console.log(query);
});
app.listen(3000);
4.3 POST申请参数
- 参数被搁置在申请体中进行传输
- 获取POST参数须要应用data事件和end事件
- 应用querystring零碎模块将参数转换为对象格局
// 导入零碎模块querystring 用于将HTTP参数转换为对象格局
const querystring = require('querystring');
app.on('request', (req, res) => {
let postData = '';
// 监听参数传输事件
req.on('data', (chunk) => postData += chunk;);
// 监听参数传输结束事件
req.on('end', () => {
console.log(querystring.parse(postData));
});
});
4.4 路由
http://localhost:3000/index
http://localhost:3000/login
路由是指客户端申请地址与服务器端程序代码的对应关系。简略的说,就是申请什么响应什么。
// 当客户端发来申请的时候
app.on('request', (req, res) => {
// 获取客户端的申请门路
let { pathname } = url.parse(req.url);
if (pathname == '/' || pathname == '/index') {
res.end('欢送来到首页');
} else if (pathname == '/list') {
res.end('欢送来到列表页页');
} else {
res.end('道歉, 您拜访的页面出游了');
}
});
4.5 动态资源
服务器端不须要解决,能够间接响应给客户端的资源就是动态资源,例如CSS、JavaScript、image文件。
4.6 动静资源
雷同的申请地址不同的响应资源,这种资源就是动静资源。
http://www.baidu.com/article?…
http://www.baidu.com/article?…
4.7 客户端申请路径
1. GET形式
- 浏览器地址栏
- link标签的href属性
- script标签的src属性
- img标签的src属性
- Form表单提交
2. POST形式
- Form表单提交
发表回复