HTTP相关 && 对称/非对称加密简述

最后一次更新时间:Sunday, August 30th 2020, PM

 

HTTP的底层是TCP,所以,TCP的一些特性在HTTP中得以保留。由于TCP中存在长连接与短连接,所以HTTP中也存在长连接与短连接。

HTTP的长连接

HTTP的长连接是基于TCP长连接做出的封装处理。HTTP长连接我们称之为Keep-Alive机制,其内容是:若长连接在2个小时(保活定时)内无任何反应,Server便向Client发送探测报文段,此时可能有4种结果:

  1. Client正常运行,且正常响应:
    则Server保活定时复位(Reset)。

  2. Client崩溃/重启,,无法响应:
    Server继续每隔75秒发送一次探测报文段,共发送10次。若Client仍然没有响应,则关闭连接(CLOSED)。

  3. Client崩溃后重启,一开始无响应,后来正常:
    重启连接(连接已经中断,物是人非)。

  4. Client正常运行,但探测报文段不可达(Client无响应):
    同第二点。

HTTP的短连接

HTTP的短连接实际上是由于HTTP的特性(无连接)决定的。

所以,让我们引入HTTP的两个特性:无连接、无状态。

 

 

 

HTTP是无连接的

每次只处理一个请求,处理完(收到Client应答)就断开。
解决:Keep-Alive机制。

HTTP是无状态的

每一次打开网页都完全独立。

解决

  1. Cookie:
    存储在浏览器(Bowser)中,由Server生成
    下一次请求该网站时,会把该Cookie发送给Server
    不安全(在Server之外被非法读写)

  2. Session
    存储在Server,较安全
    但是Server需要Client提供Session_id才能找到对应Session
    Session_id通常使用Cookie存储

  3. Token
    可抵抗CSRF(跨站请求伪造)

  4. JWT

 

 

 

HTTPS

HTTP的端口默认是80;HTTPS则是443。

HTTP基于TCP,明文传输;HTTPS基于HTTP + SSL,通过对称加密与非对称加密传输。下面我顺便简单介绍一下对称加密以及非对称加密,不感兴趣的同学可以直接跳过此部分。

对称加密

只有一个密钥,同时负责加密、解密,很好理解。

常见算法:DES、AES等。

非对称加密

有成对的密钥,称为 公钥 + 私钥,无法相互推导。一个加密,另一个解密。

常见算法:RSA、DSA等。

这里举个栗子,强化大家的理解,是一个非常有趣的数学算法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
首先,我们需要知道这样一件事:

一个8位数,与 4 0000 0001 做乘法运算,
得出的运算结果的后八位,就是那个8位数的值。

比如 12345678 * 400000001 = 4938271212345678

好了,准备完成。接下来,就是非对称加密的部分了。


Server取其任意一对因数,比如 19801 与 20201
(19801 * 20201 = 400000001)

我们设公钥为 19801, 私钥为 20201
私钥存储在Server中,严格确保不外泄
把公钥公开到网络中,并且附送上加密算法:

密文 * 公钥,再取其后八位


假设,Client A想要传输内容为“12345678”的数据包给Server
Client A获取到Server公开的公钥 19801
12345678 * 19801 = 244456770078,取后八位56770078
Client A将56770078传输给Server

在Client A向Server传输56770078时
Client B通过抓包解包等技术手段,获取到该加密内容56770078
由于加密算法是一个有损算法(舍弃了前4位)
所以Client B即便知道加密过程,也无法还原数据

好,此时Server也获取到了Client A的数据包
Server 把 密文 * 私钥
(56770078 * 20201 = 1146812345678)
再取其后8位,得到原文“12345678”

怎么样,是不是非常简单易懂~ 这就是非对称加密的核心内容。这只是一个非常简单的示例,可能放在今天,随随便便的一台个人计算机就可以根据公钥20201破解出私钥19801。但是在没有计算机的年代,靠大量人工的算力也无法通过公钥破解出私钥。随着学者在数学领域的探索,非对称加密的实际应用早已结合了各种前沿的数学运算。当然了,这些都不是我等搬砖狗深究之事~

SSL原理

非对称加密虽然十分安全,但是性能比起对称加密则十分低下。而Bowser与Server之间的数据交互十分频繁,采用非对称加密显然不合适。

在SSL中,采用了非对称加密与对称加密相结合的方式。即Server通过非对称加密,把对称加密所使用的密钥,递交给Client。具体的过程,如下图所示:

其中证书验证的环节,我们暂且不细究。此处涉及到的并非纯粹的技术问题,而是类似于互联网规章制度,感兴趣的同学可以自行了解一下。

 

 

 

与Server的四种交互

  1. GET 查询
  2. POST 修改
  3. PUT 增加
  4. DELETE 删除

实际上,单独的 GET / POST 就可以实现增删改查。

GET是幂等的(对同一个URL,多个请求返回相同结果)。

POST使用必须用到表单Form(所以很多人偷懒使用GET)。

GET与POST的区别

  1. GET提交的数据明文放在URL后边,不安全。
    而POST则是把提交的数据放在HTTP包中加密传输,较为安全。

  2. GET提交的数据量较小(最多1024字节)。
    POST理论上无限制。

 

 

 

HTTP请求、响应

HTTP请求

HTTP请求包含

  1. 请求方法(GET/POST)
  2. 请求头
    (空一行,表示请求头结束)
  3. 请求正文

HTTP响应

HTTP响应包含

  1. 状态行(包含状态码
  2. 响应头
    (空一行,表示响应头结束)
  3. 响应正文

状态码

1XX

信息码。Server已接收,Client可继续。

2XX

成功码。Server已接收并处理。

3XX

重定向码。服务器要求客户端重定向。

重定向:亦称URL转发,用于当前资源(页面)迁移到新URL。

301

永久重定向。例如www.google.com迁移到google.com
优点:

  • 可以减少DNS的缓存(提高缓存友好型)
  • 防止访问量分散(提高网站竞价排名)
302

临时重定向。旧资源仍可访问,但临时跳转访问新资源。
优点:

  • 搜索引擎不会更新资源的链接,比301更利于SEO

4XX

客户端错误码。Client的请求有非法内容。

400

请求有语法错误。

401

请求未经授权。

403

Server收到,但拒绝提供服务(原因会写在响应正文中)。

404

请求的资源不存在。

5XX

服务器错误码。Server未能正常处理请求。

500

服务器Error。

503

服务器当前无法处理(过段时间可能恢复)。