9. http协议_响应状态码_页面渲染流程_路由_中间件
1. http协议
超文本传输协议
协议详细规定了 浏览器 和 万维网服务器 之间互相通信的规则
客户端与服务端通信时传输的内容我们称之为报文(请求报文、响应报文)
- 常见的发送 get 请求方式
在浏览器地址栏输入 url 地址访问
所有的标签默认发送的是 get 请求:如 script link img a...
form 表单默认也是 get 请求
- 常见的发送 post 请求方式
只能通过 form 表单,设置 method="post" 发送
- ajax 可以发送任意请求
2. 响应状态码
告诉浏览器(接受响应),响应内容是怎么样的状态
- 1xx: 基本不用
- 2xx: 响应成功的状态
200
- 3xx: 请求资源重定向
302 请求的资源/网址重新定向到新的一个网址
304 请求的资源/网址重新定向到缓存中
- 4xx: 请求资源未找到
404 服务器没有问题,资源在服务器中找不到
- 5xx: 服务器内部错误
500 服务器出错了
3. 从浏览器输入一个url地址(www.baidu.com),到最终页面渲染完成,中间发生了什么?
① DNS解析
将域名地址解析为 ip 地址
② TCP连接:TCP三次握手
第一次握手: 浏览器发送给服务器,告诉服务器,我将要发送请求了,你准备接受一下
第二次握手: 服务器发送给浏览器,告诉浏览器,我准备好了,你放马过来
第三次握手: 浏览器发送给服务器,告诉服务器,我真的要发了,你准备好
③ 发送请求报文
请求报文
④ 接受响应
响应报文
⑤ 渲染页面
遇到 html,调用 html 解析器,将 html 的 dom 结构解析为 dom 树
遇到 css,调用 css 解析器,将 css 样式解析 cssom 树
将 dom 树和 cssom 树组合在一起,形成 render 树
先布局 layout,再渲染 render
遇到 js,调用 js 引擎,解析 js 代码,如果 js 中有操作 dom,它会修改 dom 树,如果有修改样式,它会修改 cssom 树
将 dom 树和 cssom 树组合在一起,形成 render 树
先布局 layout,再渲染 render (页面重排和重绘)
⑥ TCP四次挥手 断开连接 ---- 断开浏览器发送的请求的链接,断开浏览器接受响应的链接
第一次挥手: 浏览器发送给服务器,告诉服务器,我东西(请求报文)发完了,你准备关闭吧
第二次挥手: 服务器发送给浏览器,告诉浏览器,我接受完了,我准备关闭,你也准备关闭吧
第三次挥手: 服务器发送给浏览器,告诉浏览器,我东西(响应报文)发完了,你准备关闭吧
第四次挥手: 浏览器发送给服务器,告诉服务器,我接受完了,我准备关闭,你也准备关闭吧
4. 路由
组成:
请求方式 get(查) / post(增) / put(改) / delete (删) ....
路由路径 必须'/'开头 /shop/:id :id部分有params参数
回调函数(句柄函数)
- req 请求信息
req.query 获取查询字符串参数 GET 请求
req.params 获取params参数
req.headers 获取请求头的所有信息
req.body 获取请求体参数 POST请求 (默认 express 框架是解析不了请求体数据的,要想解析需要引入中间件实现)
- res 响应信息
注意:返回响应的方法有且只能设置一个,一旦有多个就会报错
res.download(文件相对路径) 返回响应,让浏览器自动下载指定文件
res.sendFile(文件绝对路径) 返回响应,让浏览器自动打开指定文件
res.end() 返回响应, 返回一个快速响应
res.json() 返回响应, 将传入的数据转化为json字符串返回
res.send() 返回响应, 根据传入的数据的类型,来自动判断添加相应的响应头来处理
res.redirect() 返回响应,请求资源重定向新的地址,默认响应状态码为302
res.get() 获取响应头的内容
res.set() 设置响应头的内容
res.status() 设置响应状态码
作用: 接受请求、返回响应 定义请求地址
使用: app.请求方式(路由路径, (request, response) => {});
request.query 参数(查询字符串参数): ?username=111&pwd=222
request.params 参数 : http://localhost:3000/hotel/123456 --> 123456就是params参数
5. 中间件
本质是一个函数 (req, res, next) => {}
作用:做一些重复做的事情。(当有多个路由重复做同一件事,这时就会交给中间件完成)
通过app.use(中间件函数)
解析原理:
所有路由和中间件都在一个数组中,会按照 js 引擎解析代码的先后顺序添加路由和中间件
当请求发送到服务器的时候,服务器获取到当前的请求信息(请求方式、请求路由路径),
遍历数组,找到第一个匹配(请求路由路径和请求方式必须完全一致)到的路由或者中间件(默认接受处理所有请求),执行其回调函数
如果处理的是中间件,中间件内部如果调用了next()方法,还会接下来匹配下一个路由或者中间件
没找到,返回一个状态码为404的响应, Cannot GET /xxx Cannot POST /xxx
9. http协议_响应状态码_页面渲染流程_路由_中间件的更多相关文章
- TCP/IP协议族(一) HTTP简介、请求方法与响应状态码
接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单 ...
- 02-HTTP的请求方法以及响应状态码
1. HTTP的请求方法以及响应状态码 1.1. 请求方法 http请求方法有GET.POST.PUT.HEAD.DELETE.OPTIONS.TRACE.CONNECT.当然上述方法是基于HTT ...
- http协议介绍及get与post请求、响应状态码
HTTP: 通信双方如果想要通信就必须遵循一定的规则,我们把这个规则称之为HTTP协议! 报文: HTTP协议通信的内容我们称之为:报文 报文格式: 报文首部 空行 报文主体 1.请求报文 ...
- HTTP协议—常见的HTTP响应状态码解析
常见的HTTP响应状态码解析 1XX Informational(信息性状态码) 2XX Success(成功状态码) 3XX Redirection(重定向状态码) 4XX Client Error ...
- 《HTTP协议详解》读书笔记---请求篇之响应状态码
在接收和解释请求消息后,服务器返回一个http响应消息.它也分为3个部分:状态行.消息报头.响应正文,格式如下: HTTP-VersionStatus-CodeReason-PhraseCRLF(CR ...
- Java Web学习总结(21)——http协议响应状态码大全以及常用状态码
http协议响应状态码大全以及常用状态码 当我们在浏览网页或是在查看服务器日志时,常会遇到3位数字的状态码,这3位数字是什么意思呢?其实,这3位数字是HTTP状态码,用来表示网页服务器HTTP响应状态 ...
- HTTP协议---HTTP请求中的常用请求字段和HTTP的响应状态码及响应头
http://blog.csdn.net/qxs965266509/article/details/8082810 用于HTTP请求中的常用请求头字段 Accept:用于高速服务器,客户机支持的数据类 ...
- HTTP协议图--HTTP 响应状态码(重点分析)
1. 状态码概述 HTTP 状态码负责表示客户端 HTTP 请求的返回结果.标记服务器端的处理是否正常.通知出现的错误等工作. HTTP 状态码如 200 OK ,以 3 位数字和原因短语组成.数字中 ...
- 关于HTTP协议与HTTP状态码的简要介绍
在互联网时代HTTP协议的重要性无需多言,对于技术岗位的同学们来说理解掌握HTTP协议是必须的.本篇博客就从HTTP协议的演进.特性.重要知识点和工作中常见问题的总结等方面进行简单的介绍.理解掌握了这 ...
随机推荐
- Git 分支 (三) 分支管理&&分支开发工作流
分支管理 git branch 命令不只是可以创建与删除分支. 如果不加任何参数运行它,会得到当前所有分支的一个列表: 注意 master 分支前的 * 字符:它代表现在检出的那一个分支(也就是说,当 ...
- 基于ionic4、cordova搭建android开发环境
前颜(yan)最近公司有一个项目需求是利用h5进行跨平台开发,这里所说的跨平台开发指的是:将h5代码利用某种方式或工具环境进行打包,最后生成android的apk以及ios的ipa. 本文只讲解and ...
- 第三节:框架前期准备篇之利用Newtonsoft.Json改造MVC默认的JsonResult
一. 背景 在MVC框架中,我们可能经常会用到 return Json(),而Json方法内部又是一个JsonResult类,那么JsonResult内部又是什么原理呢?在MVC框架中,各种xxxRe ...
- Concurrent下的线程安全集合
1.ArrayBlockingQueue ArrayBlockingQueue是由数组支持的线程安全的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序.这是一个典型的“有界缓存区”,固定 ...
- luogu P5286 [HNOI2019]鱼
传送门 这题真的牛皮,还好考场没去刚( 这题口胡起来真的简单 首先枚举D点,然后对其他所有点按极角排序,同时记录到D的距离.然后按照极角序枚举A,那么鱼尾的两个点的极角范围就是A关于D对称的那个向量, ...
- Django REST Framework API Guide 07
本节大纲 1.Permissions 2.Throttling Permissions 权限是用来授权或者拒绝用户访问API的不同部分的不同的类的.基础的权限划分 1.IsAuthenticated ...
- stm32F10x复习-1
地点:家 1.库文件说明 _htmresc: LOGO的设计图 Libraries: 源代码及启动文件 -- CoreSupport 核内设备函数层的CM3核通用的源文件.作用是为采用Cortex-M ...
- 设计模式五: 原型模式(Prototype)
简介 原型模式是属于创建型模式的一种,是通过拷贝原型对象来创建新的对象. 万能的Java超类Object提供了clone()方法来实现对象的拷贝. 可以在以下场景中使用原型模式: 构造函数创建对象成本 ...
- 肺结节CT影像特征提取(二)——肺结节CT图像特征提取算法描述
摘自本人毕业论文<肺结节CT影像特征提取算法研究> 医学图像特征提取可以认为是基于图像内容提取必要特征,医学图像中需要什么特征基于研究需要,提取合适的特征.相对来说,医学图像特征提取要求更 ...
- Alpha 冲刺 (8/10)
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:冲刺倒计时之8 团队部分 后敬甲(组长) 过去两天完成了哪些任务 首页重新设计 课程时间线确定 答辩准备 接下来的计划 ...