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

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

//用于创建网站服务器的模块
const http=require('http')
//app对象就是网站服务器对象
const app=http.createServer()//当客户端有请求来得时候,执行这个事件
app.on('request',(req,res)=>{//获取请求方式,保存在require对象的method属性中,//它的属性值就是这次请求所用的请求方式//req.methodconsole.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.methodconsole.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.methodconsole.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'])

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

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

  1. 网络基础知识汇总学习

    一.网线(双绞线)连接线的制作 双绞线制作有 568A 和 568B 两个标准,日常以 568B 标准较常用. 568B 标准按颜色排序为: 1- 橙白. 2- 橙.3- 绿白.4- 蓝. 5- 蓝白 ...

  2. 网络基础知识学习笔记

    网络基础知识学习笔记 参考菜鸟教程.个人学习整理,仅供参考.三年前学过,三年没用忘了,重新学习整理一下. 文章目录 网络基础知识学习笔记 OSI七层网络模型 IP地址 子网掩码及网络划分 网络协议 A ...

  3. 100 个网络基础知识普及,看完成半个网络高手!(文末附PDF版本)

    点击上方"涛哥聊Python",选择"星标"公众号 重磅干货,第一时间送达 来源:CU技术社区 阅读文本大概需要 5 分钟 为了方便大家更好着按需查找对应知识点 ...

  4. linux基础-网络基础知识篇

    一.网络基础知识概念 1.什么是网络? 网络即为实现通讯的技术. 2.网络的诞生六步曲 (1).早期的网络需要拥有两台通讯的主机,当主机之间有通讯需求是就构建网络进行通讯 (2).当主机网络需要通讯时 ...

  5. 计算机二级二叉树基础知识,2017年计算机二级公共基础知识学习教程:树与二叉树...

    (六)树与二叉树 1.树的基本概念 树是一种简单的非线性结构.在树结构中,数据元素之间有着明显的层次结构.在树的图形表示中,用直线连接两端的结点,上端点为前件,下端点为后件. 在树结构中,每一个结点只 ...

  6. 收藏100个网络基础知识

    100 个网络基础知识普及,看完成半个网络高手! 1)什么是链接? 链接是指两个设备之间的连接.它包括用于一个设备能够与另一个设备通信的电缆类型和协议. 2)OSI 参考模型的层次是什么? 有 7 个 ...

  7. 第二十六期:100 个网络基础知识普及,看完成半个网络高手

    本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 作者:佚名来源 本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 1)什么是链接? 链 ...

  8. 网络基础知识 快速计算子网掩码的2种方法

    网络基础知识 快速计算子网掩码的2种方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office ...

  9. 计算机二级循环队列知识点,考点!计算机二级考试公共基础知识冲刺复习笔记:栈、队列和循环队列...

    小编所收集到的相关计算机二级考试公共基础知识冲刺复习笔记:栈.队列和循环队列的资料 大家要认真阅读哦! 1.栈(Stack)又称堆栈. (1)栈是一种运算受限的线性表,其限制是仅允许在表的一端进行插入 ...

  10. 计算机网络有哪些技能知识,网络基础知识及操作技能.ppt

    网络基础知识及操作技能 主讲人 李春报 一.计算机网络概述 1.计算机网络的概念 计算机网络是把分布在不同地理位置上的计算机.终端,用通信设备和通信线路连结起来,再配以相应的网络软件,从而使众多计算机 ...

最新文章

  1. float最大值_float.h库
  2. python Selenium 常见操作 元素定位
  3. 6.23 NIUDAY 深圳站 | 从新零售到金融,Follow 技术大咖一起探索人工智能应用的无限可能...
  4. 【拓扑排序】【DP】奖金(ssl 1325)
  5. 2018.10.27 bzoj3209: 花神的数论题(数位dp)
  6. Python __str __()和__repr __()函数
  7. Windows服务工程创建、部署
  8. 数据绑定(九)Binding的数据校验
  9. 删数问题(Noip1994)--贪心
  10. php fseek函数,php fseek函数怎么用 - fseek
  11. matlab传递函数带符号变量,符号传递函数matlab
  12. 如何卸载 3DMAX ?怎么把3DMAX彻底卸载删除干净重新安装的方法
  13. 利用matlab裁剪图片大小,MATLAB裁剪图片
  14. yigo基础学习笔记5_yigo二次开发配置
  15. 看黑客如何在Black Hat 2016上5秒干掉 macOS 系统,“催吐”ATM机| 宅客周刊
  16. 那些年,从博客到出书的博主
  17. OKRs,自由之风劲吹,发挥无限创造力 | Chatopera
  18. 253Echarts - 3D 曲面(皮革材质)
  19. 免杀远程监控软件大盘点
  20. 吻吻更健康!揭晓接吻的11大优点

热门文章

  1. QT+ 状态栏+核心控件+浮动窗口
  2. omcat 7 的domain域名配置,Tomcat 修改JSESSIONID
  3. scrollView滚动原理
  4. 四、Oracle的复杂查询
  5. Delphi开发人员指南 第一部份快速开发的基础 第2章 Object Pascal 语言(二)
  6. 分层架构中各层之间关系如何界定,期待大家来讨论
  7. 数据结构之红黑树插入详解
  8. 设计模式 (十一) 外观模式
  9. 这10个idea小技巧,让我的开发效率提升了10倍
  10. springcloud之ribbon负载均衡