HTTP基础小结

一 前言

最近开始学习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标志的数据包,表明“握手”结束

这就是三次握手
总结图以下:
PkYztJ.md.png

10 URI 和 URL
URI: 统一资源标识符

由某个协议方案表示的 资源的定位字符串
 不一样的协议方案,其获取资源的语法等规则有区别

URL: 统一资源定位符,是URI的子集。也就是通常咱们输入浏览器中的 网页地址

绝对URI的格式:

协议类型(协议方案名):// [登陆验证信息@]服务器地址:端口号 / 服务器上的文件路径 ?查询字符串 #片断标识符
其中,
    服务器地址: 能够是 IP/域名;
    文件路径:   相似于 服务器上的文件目录结构
    查询字符串: 用于肯定 文件路径内的某一资源,形如 xx=yy

具体见下示意图:
PkUFoD.md.png

三 HTTP 协议

3.1 协议总体内容

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 的链接管理

3.2 请求方法

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/)

3.3 HTTP状态码

1 状态码的分类见图:
PkrABR.png

2 常见的状态码含义
可参考

《图解HTTP》第4章
[HTTP常见状态码;](https://www.cnblogs.com/starof/p/5035119.html)
[MDN的 HTTP响应代码](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status)

3.4 HTTP首部

1 做用:

HTTP首部字段 给浏览器/服务器 提供了 报文主体大小/所使用的语言/认证信息等额外信息内容

2 语法结构:

首部字段名: 字段值1,字段值2

3 类型:

分类一: 通用首部字段;  请求首部字段;  响应首部字段;  实体首部字段
分类二: 端到端首部;    逐跳首部

4 具体内容及含义
可参考

《图解HTTP》第5章
 [MDN的 HTTP Headers](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers)

四 结语

这篇文章只是介绍了HTTP的基本知识,不少具体知识只是提供了参考文档,缘由是那部分知识偏向于真正用到时的随手速查
全部记忆性而非理解性的内容,我以为没有必要做为具体内容。

其次,关于HTTPS和安全的部分,本文并未说起,之后会再单独写一篇博文。

最后,这篇博文虽然按照我本身的思路整理了相关基本知识,可是参考了不少已有资料,我写在了文末的参考文档部分里。若是给您形成不便,
我会第一时间修改或删除相应内容。

五 参考文档

  1 图解HTTP;
  2 MDN的 HTTP目录

  3 如何生动的解释ip地址、子网掩码、网关等概念;
  4 IP地址和MAC地址的区别和联系是什么;
  5 怎样生动描述 TCP 的「三次握手」;

相关文章
相关标签/搜索