网络基础知识(黑马教程笔记)-2-http协议(请求报文)

在这里插入图片描述

实际上,请求方式就是一种标识,它告诉服务器当前这个请求要做的事情的类型。比如说获取数据的请求我们一般用get,添加数据的请求就用post,而类似于登陆操作等的一般数据传送,就用post ,因为post安全些。

1,最常见的客户端向服务器端发送get请求就是在浏览器中输入网址的方式

//用于创建网站服务器的模块
const http=require('http')
//app对象就是网站服务器对象
const app=http.createServer()

//当客户端有请求来得时候,执行这个事件
app.on('request',(req,res)=>{
	//获取请求方式,保存在require对象的method属性中,
	//它的属性值就是这次请求所用的请求方式
	//req.method
	console.log(req.method)
	res.end('<h2>hello world</h2>')
})
//还要监听端口,才能向外界提供服务
app.listen(3000)
console.log("网站服务器启动成功")

然后在命令行窗口执行此文件,创建web服务器。
再在浏览器中输入地址,就可以在控制台看到这次请求的方式:
在这里插入图片描述
有两个get请求,另一个是这个图标产生的,先不管。
在这里插入图片描述

2,可以通过表单form标签的方式,提交post请求

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<form method="post" action="http://localhost:3000/">
			<input type="submit" name=""/>
		</form>
	</body>
</html>

运行这段代码到浏览器,因为又向服务器提交了请求,就又会触发哪那个创建网站服务器的事件:又会输出本次请求的方式:
在这里插入图片描述

那给服务器发送请求的方式不同的话,又有什么作用呢?服务器可以根据请求方式的不同,来响应不同的内容。
接下来就做一下判断。

3.服务器判断请求的类型,然后做不同的响应。

//用于创建网站服务器的模块
const http=require('http')
//app对象就是网站服务器对象
const app=http.createServer()

//当客户端有请求来得时候,执行这个事件
app.on('request',(req,res)=>{
	//获取请求方式,保存在require对象的method属性中,
	//它的属性值就是这次请求所用的请求方式
	//req.method
	console.log(req.method)
	//根据不同的请求方式,服务器做出不同的响应
	if(req.method =='post'){
		res.end('post')
	}else if(req.method == 'GET'){
		res.end('get')
	}
	// res.end('<h2>hello world</h2>')
})
//还要监听端口,才能向外界提供服务
app.listen(3000)
console.log("网站服务器启动成功")

在这里插入图片描述
(忽略第二个get哈)

上文中的if语句中,就是服务器根据不同的请求类型做出的响应:在浏览器上显示post或者get。

4,(请求报文):根据用户输入的访问地址不同,服务器做出不同的响应:

然后又产生了一个问题,我们利用地址直接访问浏览器时,都是get方法呢:
在这里插入图片描述
这样可不行,服务器如何根据你地址的请求不同做出不同的响应呢???
比如index.html时,想让它显示首页的内容,list.html时,想显示列表页的内容。而用户请求的地址不存在,想让它显示404的界面呢???
于是,就需要服务器来获取用户访问的地址的具体信息,也就是请求地址:request URL。
在这里插入图片描述
require对象的这三个属性存储着这些值。所以我们只要取到用户的访问地址,然后进行一系列处理就可以啦!
我们把之前的代码进行修改:

//用于创建网站服务器的模块
const http=require('http')
//app对象就是网站服务器对象
const app=http.createServer()

//当客户端有请求来得时候,执行这个事件
app.on('request',(req,res)=>{
	//获取请求方式,保存在require对象的method属性中,
	//它的属性值就是这次请求所用的请求方式
	//req.method
	console.log(req.method)
	//根据用户访问的地址不同,显示不同的界面
	if (req.url == '/index'){
		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 world</h2>')
})
//还要监听端口,才能向外界提供服务
app.listen(3000)
console.log("网站服务器启动成功")

于是输入不同的网址访问时:
在这里插入图片描述
当我们什么都不输入时,查看req.url返回啥?
在这里插入图片描述
是一个反斜杠!
通常,我们输入一个域名时,就是希望它页返回首页,所以服务器响应内容可以修改为:

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')
	}	

这样一来,我们输入index和不输入,都是返回首页内容了。
在这里插入图片描述
而url.headers里面则是存储着所有的报文信息:
在这里插入图片描述
注意到,报文信息其实是放置在一个对象中的,要访问其中的某个属性,则用req.headers[‘对应属性名’]来进行访问。

console.log(req.headers['accept'])

这就能取得请求报文中对应属性的值。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值