最近开始学习AJAX相关知识,因此正好仔细复习一下HTTP的相关基础知识。html
1 IP和MAC
:浏览器
S1 网络 分红不少个子网, 就像一个国家分红不少个省份 S2 寄送物品的时候,只要按省份分类 下发到各省级物流中心便可 (由子网内部解决) S3 IP地址 是和地域相关的: 同一个子网上的设备,分配的 IP地址前缀 都是同样的(相似于各省市的邮政编码) 路由器只需记住每一个子网的位置便可,大大减小了路由器所须要的内存 S4 MAC地址 是和设备相关的: 咱们须要用 MAC地址来区分不一样的设备;
总之安全
MAC地址: 相似于 一我的的体貌特征; IP地址: 相似于 电话号码/邮编地址(联系地点)
2 网关
:服务器
联系外网的设备, 具备其余网关地址的 路由表 具备内网内 IP和MAC对应的 ARP表
3 DHCP服务器
: 随机获得IPcookie
4 路由
: 网关之间的查询和链接的 一系列过程网络
5 DNS
: 域名和IP的对照表post
6 客户端
: 能发送(资源)请求 + 接受响应资源的设备,均可以称为是客户端学习
7 协议
: 从发起请求——得到响应资源,这过程当中的 各类约定规则的集合编码
咱们能够类比一下平常生活中的例子来形象理解一下:
S1 若是古代人A想获取一份救济品,因而他向当地的行政员B寄了一份申请信,这就是发起一个资源请求。
S2 在通过一段路径传输后,行政员B收到了申请(信),因而返回了某些资源(好比 救济金 /救济粮 /拒绝信等),这就叫作 处理请求并响应
S3 在这过程当中,A 和 B 之间不少方面都是有规则约束的(好比 A 申请信的格式 / B返回资源的格式 / 返回资源的多少 /传输路线的选择等等)url
全部这些规则的集合,就称为`协议`
8 TCP/IP 分层设计
从上面的例子能够看出,资源的传输(发出请求—传递请求—接到请求并处理—返回响应—传输响应—获取响应并处理)实际上是一个很复杂的过程,须要考虑到许多不一样方面因素,咱们能够大体分为如下层次:
S1 应用层: 首先要明确 A向B 发起请求的 具体目的是什么 (多是要获取救济品/ 多是要投诉官员C/ ….)
S2 传输层: 其次要明确 A和B之间如何高效完整的 传递信息/资源;
S3 网络层: 明确 传输路线
最关键的是要知道 IP地址和 MAC地址 核心是 `路由选择机制`
S4 链路层: 实际的物理道路/大桥等实体建筑
分层的目的其实相似于分工,都是为了各司其职,互不干扰,从而提升效率,继续举例来讲:
S1 应用层——写信人&信件的内容
: 不一样的目的,信件的内容各不相同。可是只要负责写好信件就能够;
S2 传输层——信件/资源 加工处理站
: 包括切分信件/资源为 小块,以便并行发送 + 内容完整性验证;
S3 网络层——信件/资源 传输中转站
: 明确 A 和 B 之间的传输路线;
S4 链路层—— 实际派送人员
: 实际派送资源的人员
每过一层都会添上/去除 该层的首部信息(HTTP数据——TCP首部——IP首部——以太网首部)
9 TCP相关
:
TCP的三次握手缘由
:
三次握手便是在最快最省力的状况下作出的选择 好比在红军时代,A连和B连分在左右翼,约定在几时几分一同发起打击。这个几时几分的信息就须要人工经过通信员来走路传递。 因此A连指挥官派出通信员。这是第一次。 在TCP里,就是 `发送端 首先发送一个带 SYN标志的数据包 给对方` 假设通信员到达了B连,而且告知了B连指挥官几时几分,B连指挥官必定会让通信员再回去通知A连指挥官, 可怜的通信员只能冒着危险返回A连,由于A连指挥官看不到通信员返回的话,不知道几时几分这个信息到底传达到了B连没有。 这是第二次。
在TCP里,就是 接收端收到后, 回传一个带有 SYN/ACK标志的数据包 以示传达确认信息
在B连指挥官开始担忧通信员是否回到了A连,若是没回到,B连指挥官会设身处地的想想A连指挥官见不到返回的通信员,确定是不敢打的, 因此B连指挥官最盼望的是再次看到通信员出如今B连,因此A连指挥官会让通信员再回B连一次。 这是第三次。
在TCP里,就是 发送端再 回传一个带 ACK标志的数据包,表明“握手”结束
10 URI 和 URL
URI: 统一资源标识符
由某个协议方案表示的 资源的定位字符串 不一样的协议方案,其获取资源的语法等规则有区别
URL: 统一资源定位符,是URI的子集。也就是通常咱们输入浏览器中的 网页地址
绝对URI的格式:
协议类型(协议方案名):// [登陆验证信息@]服务器地址:端口号 / 服务器上的文件路径 ?查询字符串 #片断标识符 其中, 服务器地址: 能够是 IP/域名; 文件路径: 相似于 服务器上的文件目录结构 查询字符串: 用于肯定 文件路径内的某一资源,形如 xx=yy
1 HTTP协议 规范了 客户端和服务器端间的通讯流程
:
S1 客户端发起请求 —— S2 服务器接收+处理请求,返回响应内容 —— S3 客户端接收+处理响应,展现/使用 响应内容;
可参考 MDN的 典型的HTTP会话
2 HTTP 规定了 通讯报文的内容+格式
:
S1 请求报文: 请求行: 请求方法 + 请求的资源内容(请求URL: 相对URL+host首部字段定位) + HTTP协议版本; 请求首部字段 \空行(CR+LF) 请求内容实体 S2 响应报文: 状态行:HTTP协议版本 + 状态码 + 缘由短语; 响应首部字段 \空行(CR+LF) 响应内容实体
可参考 MDN的 HTTP消息
3 HTTP 规定了 自身是一种无状态协议 + 持久链接
S1 为了实现保持状态功能 —— `cookie技术` S2 持久链接: HTTP keep-alive, 只要任意一端没有明确提出断开链接,则保持 TCP链接状态; 持久链接的好处是实现了管线化,从而能够 同时并行发送多个请求
可参考:
MDN的 HTTP cookies
MDN的 HTTP/1.x 的链接管理
1 具体类型参见: MDN的 HTTP请求方法
2 GET和POST请求的区别:
1 根本区别是二者语义上的区别,GET的语义是「获取数据」,POST的语义是「提交数据」; 2 get参数有长度限制(受限于url长度,具体数值取决于浏览器和服务器限制),而post理论上没有限制 3 GET幂等+不改变服务器状态, POST不幂等+改变服务器状态 4 GET提交的数据会在URL中显示出来, 而POST 是把提交的数据放在 HTTP包的包体中
可参考
[get和post区别;](https://www.zhihu.com/question/28586791) [HTTP协议中GET和POST方法的区别](https://sunshinevvv.coding.me/blog/2017/02/09/HttpGETv.s.POST/)
1 状态码的分类见图:
2 常见的状态码含义
可参考
《图解HTTP》第4章 [HTTP常见状态码;](https://www.cnblogs.com/starof/p/5035119.html) [MDN的 HTTP响应代码](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status)
1 做用:
HTTP首部字段 给浏览器/服务器 提供了 报文主体大小/所使用的语言/认证信息等额外信息内容
2 语法结构:
首部字段名: 字段值1,字段值2
3 类型:
分类一: 通用首部字段; 请求首部字段; 响应首部字段; 实体首部字段 分类二: 端到端首部; 逐跳首部
4 具体内容及含义
可参考
《图解HTTP》第5章 [MDN的 HTTP Headers](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers)
这篇文章只是介绍了HTTP的基本知识,不少具体知识只是提供了参考文档,缘由是那部分知识偏向于真正用到时的随手速查
全部记忆性而非理解性的内容,我以为没有必要做为具体内容。
其次,关于HTTPS和安全的部分,本文并未说起,之后会再单独写一篇博文。
最后,这篇博文虽然按照我本身的思路整理了相关基本知识,可是参考了不少已有资料,我写在了文末的参考文档部分里。若是给您形成不便,
我会第一时间修改或删除相应内容。
3 如何生动的解释ip地址、子网掩码、网关等概念;
4 IP地址和MAC地址的区别和联系是什么;
5 怎样生动描述 TCP 的「三次握手」;