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协议_响应状态码_页面渲染流程_路由_中间件的更多相关文章

  1. TCP/IP协议族(一) HTTP简介、请求方法与响应状态码

    接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单 ...

  2. 02-HTTP的请求方法以及响应状态码

    1.   HTTP的请求方法以及响应状态码 1.1. 请求方法 http请求方法有GET.POST.PUT.HEAD.DELETE.OPTIONS.TRACE.CONNECT.当然上述方法是基于HTT ...

  3. http协议介绍及get与post请求、响应状态码

    HTTP:  通信双方如果想要通信就必须遵循一定的规则,我们把这个规则称之为HTTP协议! 报文:  HTTP协议通信的内容我们称之为:报文 报文格式:    报文首部 空行 报文主体 1.请求报文 ...

  4. HTTP协议—常见的HTTP响应状态码解析

    常见的HTTP响应状态码解析 1XX Informational(信息性状态码) 2XX Success(成功状态码) 3XX Redirection(重定向状态码) 4XX Client Error ...

  5. 《HTTP协议详解》读书笔记---请求篇之响应状态码

    在接收和解释请求消息后,服务器返回一个http响应消息.它也分为3个部分:状态行.消息报头.响应正文,格式如下: HTTP-VersionStatus-CodeReason-PhraseCRLF(CR ...

  6. Java Web学习总结(21)——http协议响应状态码大全以及常用状态码

    http协议响应状态码大全以及常用状态码 当我们在浏览网页或是在查看服务器日志时,常会遇到3位数字的状态码,这3位数字是什么意思呢?其实,这3位数字是HTTP状态码,用来表示网页服务器HTTP响应状态 ...

  7. HTTP协议---HTTP请求中的常用请求字段和HTTP的响应状态码及响应头

    http://blog.csdn.net/qxs965266509/article/details/8082810 用于HTTP请求中的常用请求头字段 Accept:用于高速服务器,客户机支持的数据类 ...

  8. HTTP协议图--HTTP 响应状态码(重点分析)

    1. 状态码概述 HTTP 状态码负责表示客户端 HTTP 请求的返回结果.标记服务器端的处理是否正常.通知出现的错误等工作. HTTP 状态码如 200 OK ,以 3 位数字和原因短语组成.数字中 ...

  9. 关于HTTP协议与HTTP状态码的简要介绍

    在互联网时代HTTP协议的重要性无需多言,对于技术岗位的同学们来说理解掌握HTTP协议是必须的.本篇博客就从HTTP协议的演进.特性.重要知识点和工作中常见问题的总结等方面进行简单的介绍.理解掌握了这 ...

随机推荐

  1. LFYZ-OJ ID: 1010 天使的起誓

    思路 理解题目后,会发现是一个高精度除低精度求余问题,非常简单. 容易出错的地方是:求余结果为0的时候,此时,天使所在的盘子号码其实就是n,如果直接返回余数,得到的结果则是0. 被除数的范围是2-10 ...

  2. 基于STM32F1的时钟芯片DS1302驱动

    目录 DS1302.h源代码 DS1302.c源代码 DS1302.h源代码 /** ********************************************************* ...

  3. 计算机视觉学习记录 - Implementing a Neural Network from Scratch - An Introduction

    0 - 学习目标 我们将实现一个简单的3层神经网络,我们不会仔细推到所需要的数学公式,但我们会给出我们这样做的直观解释.注意,此次代码并不能达到非常好的效果,可以自己进一步调整或者完成课后练习来进行改 ...

  4. word2vec概述

    既然是概述,那么我也只会在文中谈一点关于 Word2Vec 的思想和大概的方法.对于这个算法,如果一开始学习就深入到算法细节中,反而会陷入局部极值点,最后甚至不知道这个算法是干嘛的.在了解算法大概的思 ...

  5. gitlab服务器搭建

    当然喜欢英文的可以参考官方文档:https://about.gitlab.com/downloads/ 1.  根据自己的操作系统选择相应的安装方法,我这边是阿里云 centos 7的 sudo yu ...

  6. PGCD2 - Primes in GCD Table (Hard)

    这题肝了三四天,其他啥也没做... 传送门 然后...双倍经验 简单版 不知道为什么会脑抽去帮 LZ_101 大佬验题... 题目和被 A 穿的 PGCD 一样,数据范围变成大概 2e11 ... 于 ...

  7. 帆软报表(finereport) 复选框多值查询

    定义数据集 SELECT * FROM 库存 设计模板 设置控件:控件名称 XX  要与 单元格中 取值公式  =$XX   对应,控件值可更改 下拉复选框控件: 设置控件名称(与模板中=$选仓库  ...

  8. Java的家庭记账本程序(J)

    日期:2019.3.9 博客期:041 星期六 这次就来看看我使用全新的模板写的家庭记账本程序!本次附带配色样式!作为本周的学习进度条吧!明天再研究微信小程序的方法! 这一次的记账本程序加了很多功能! ...

  9. Python学习笔记四

    一.装饰器 1.知识储备 函数对象 函数可以被引用 函数可以当参数传递 返回值可以是函数 可以当作容器的元素 def func1(): print (666) def func2(): print ( ...

  10. 蒙特卡诺近似与PBM

    介绍蒙特卡诺近似的例子代码 #include<fstream> #include<iostream> #include<cstdlib> #include<c ...