HTTP
又称为超文本传输协议
是一种基于TCP/IP的应用层通信协议;这个协议详细规定了 浏览器 和万维网 服务器 之间互相通信的规则。协议中主要规定了两个方面的内容:
- 客户端:用来向服务器发送数据,可以被称之为请求报文
- 服务端:向客户端返回数据,可以被称之为响应报文
请求报文
请求头
格式: 请求头名:值
请求头 | 说明 |
---|---|
Host | 主机名 |
Connection | 连接的设置 keep-alive(保持连接);close(关闭连接) |
User-Agent | 用户代理,客户端字符串标识,服务器可以通过这个标识来识别这个请求来自 |
哪个客户端 ,一般在PC端和手机端的区分 | |
Accept | 设置浏览器接收的数据类型 |
Accept-Encoding | 设置接收的压缩方式 |
Cookie | Cookie值 |
请求体
请求体内容的格式是非常灵活的,
(可以是空)> GET请求,
(也可以是字符串,还可以是JSON)=> POST请求
响应报文
响应头
node 中使用Http
创建Http服务端
//1. 导入 http 模块
const http = require('http');
//2. 创建服务对象 create 创建 server 服务
// request 意为请求. 是对请求报文的封装对象, 通过 request 对象可以获得请求报文的数据
// response 意为响应. 是对响应报文的封装对象, 通过 response 对象可以设置响应报文
const server = http.createServer((request, response) => {
response.end('Hello HTTP server');
});
//3. 监听端口, 启动服务
server.listen(3000, () => {
console.log('服务已经启动, 端口 3000 监听中...');
});
1、当服务启动后,更新代码必须重启服务才能生效;当然你也可以安装nodemon 来解决这个问题
2、如果响应内容中出现中文乱码,可以在响应头设置如下代码解决
response.setHeader(‘content-type’,‘text/html;charset=utf-8’);
获取请求行和请求头
方法 | 说明 |
---|---|
request.method | 获取请求方法 |
request.url | 获取请求路径,只包含url中的路径与查询字符串 |
request.headers | 获取请求头内容 |
获取请求体
const http = require('http')
const server = http.createServer((req, res) => {
let body="";
req.on('data',(chunk) => {
body += chunk;
})
req.on('end', () => {
res.end('table');
})
})
server.listen(9000, () => {
console.log('Listening on port 9000,')
})
获取请求路径与查询字符串
引入url模块
const http = require('http')
const url = require('url')
const server = http.createServer((req, res) => {
let res =url.parse(req.url)
//路径
let path=res.pathname;
//查询字符串
url.parse(req.url,true);
})
server.listen(9000, () => {
console.log('Listening on port 9000,')
})
直接实例化URL对象
const http = require('http')
const server = http.createServer((req, res) => {
let url = new URL(req.url,"http://"+req.headers.host);
res.setHeader('Content-Type','text/html; charset=utf-8');
if(url.pathname==='/login'){
res.end('登陆页面')
}else if(url.pathname==='/reg'){
res.end('注册页面')
}else{
res.end('欢迎你')
}
})
server.listen(9000, () => {
console.log('Listening on port 9000,')
})
设置HTTP响应报文
语法 | 说明 |
---|---|
response.statusCode | 设置响应状态码 |
response.statusMessage | 设置响应状态描述 |
response.setHeader(‘头名’, ‘头值’) | 设置响应头信息 |
response.write(‘xx’) response.end(‘xxx’) | 设置响应体 |