网站应用在运行过程中,服务器端需要知道客户端请求什么,客户端需要知道服务器端响应了什么,不能鸡同鸭讲。比如中国人和中国人间交流用汉语,俄国人和俄国人交流用俄语,中国人和俄国人之间如何沟通呢?这时候就需要出现一门双方都听得懂的语言,客户端和服务器端进行沟通也是同样需要一个规范就是HTTP协议。
1.HTTP协议的概念
超文本传输协议(HyperText Transfer Protocol,缩写HTTP)规定了如何从网站服务器传输超文本到本地浏览器,它基于客户端服务器架构工作,是客户端(用户)和服务器端(网站)请求和应答的标准。
超文本**就是超级文本,在文本当中除了能够包含文字以外还可以包含图片视频音频等等,实际上指的就是HTML文本。传输协议实际上就是规定了如何从网站服务器传输html文本到浏览器。HTTP协议基于客户端服务器架构是客户端和服务器端进行响应和请求的标准,也就是规定了在HTTP协议中客户端和服务器端要如何进行沟通。
2.报文
在HTTP请求和响应的过程中传递的数据块就叫报文,包括要传送的数据和一些附加信息,并且遵守规定好的格式。
在HTTP请求和响应的过程中所携带的数据块,数据块就是两者对话的说明和对话的内容,报文分为请求报文和响应范文,请求报文就是客户端向服务端发送请求时所携带的数据块。实际上就是客户端对服务端说的话。响应报文就是服务器端向客户端响应时所携带的数据块,就是服务器端对客户端说的话。在数据块中包含请求和响应的相关信息,比如用户在登录的时候输入的用户密码就是被包含在请求数据块中进行传递的,当前这次登录是成功还是失败这个消息就包含在响应数据块当中。报文在传输过程中,他还要遵循规定好的一些格式,实际上就是以冒号分隔得键值对。
对于开发人员来讲报文在哪里能够被看到呢?
比如说想看当前这个网页在请求过程中客户端跟服务器端说了什么,服务器端又响应给客户端什么,在哪里来看呢?这时候需要借助浏览器给我们提供的开发者工具
Response Headers 响应报文,服务器端对客户端说的内容
Request Headers 请求报文
报文里的信息都是以冒号分隔得键值对,客户端和服务器端说了什么呢?
请求报文中的accept是接受的意思,它告诉服务器端当前这个客户端能够接受html文件(text/html),能够接受图片(image/webp,image/apng),还有其他的(,application/xhtml+xml,application/xml)一些文件格式。
accept-language: zh-CN,zh;q=0.9
表示客户端希望收到中文的响应。
3.请求报文(Request Method)
- 请求方式(Request URL)
GET 请求数据
POST 发送数据
请求方式就是一种标识,用来告诉服务器端当前这次请求要做的事情的类型。比如说获取数据的请求一般我们用get,如果是添加数据的请求就用POST请求,如果请求既不是获取请求也不是添加数据,就是网站的一般逻辑比如说登录操作,我们也用POST,POST这种方式相对于GET请求会更安全一些。
最常见的get请求就是通过在浏览器的地址栏中输入网址的方式
2.请求地址(Request URL)
app.on(“request”,(req,res) =>{
req.headers //获取请求报文
req.url //获取请求地址
req.method //获取请求方法
})
// 用于创建网站服务器的模块
const http = require('http');
// app对象就是网站服务器对象
const app = http.createServer();
// 当用户端有请求来的时候
// req请求对象,包含了请求相关的信息,
// 获取请求方式
app.on('request',(req,res) => {
// res.end 结束请求并且为客户端响应内容
// console.log(req.method);
// console.log(req.url);
console.log(req.headers['accept']);
if(req.url == '/index' || req.url == '/'){
res.end('welcome to homepage');
}else if(req.url == '/list'){
res.end('Welcome to listpage');
}else{
res.end('not found');
}
if (req.method == 'POST'){
res.end('POST')
}else if(req.method == 'GET'){
res.end('get')
}
// res.end('<h2>hello user</h2>');
});
// 监听端口
app.listen(3000);
console.log("网站服务器启动成功")