HTTP基础小结

一 前言

最近开始学习AJAX相关知识,所以正好仔细复习一下HTTP的相关基础知识。

二 前置知识和规则

1 IP和MAC:

S1 网络 分成很多个子网, 就像一个国家分成很多个省份
S2 寄送物品的时候,只要按省份分类 下发到各省级物流中心即可 (由子网内部解决)
S3 IP地址 是和地域相关的:
    同一个子网上的设备,分配的 IP地址前缀 都是一样的(类似于各省市的邮政编码)
    路由器只需记住每个子网的位置即可,大大减少了路由器所需要的内存
S4 MAC地址 是和设备相关的:
    我们需要用 MAC地址来区分不同的设备;

总之

MAC地址: 类似于 一个人的体貌特征;
IP地址:  类似于 电话号码/邮编地址(联系地点)

2 网关:

联系外网的设备,
具有其他网关地址的 路由表
具有内网内 IP和MAC对应的 ARP表

3 DHCP服务器: 随机得到IP

4 路由: 网关之间的查询和连接的 一系列过程

5 DNS: 域名和IP的对照表

6 客户端: 能发送(资源)请求 + 接受响应资源的设备,都可以称为是客户端

7 协议: 从发起请求——获得响应资源,这过程中的 各种约定规则的集合

我们可以类比一下日常生活中的例子来形象理解一下:
S1 如果古代人A想获取一份救济品,于是他向当地的行政员B寄了一份申请信,这就是发起一个资源请求。
S2 在经过一段路径传输后,行政员B收到了申请(信),于是返回了某些资源(比如 救济金 /救济粮 /拒绝信等),这就叫做 处理请求并响应
S3 在这过程中,A 和 B 之间很多方面都是有规则约束的(比如 A 申请信的格式 / B返回资源的格式 / 返回资源的多少 /传输路线的选择等等)

所有这些规则的集合,就称为`协议`

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 的「三次握手」;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值