HTTP相关 && 对称/非对称加密简述
最后一次更新时间:Sunday, August 30th 2020, PM
HTTP的底层是TCP,所以,TCP的一些特性在HTTP中得以保留。由于TCP中存在长连接与短连接,所以HTTP中也存在长连接与短连接。
HTTP的长连接
HTTP的长连接是基于TCP长连接做出的封装处理。HTTP长连接我们称之为Keep-Alive机制,其内容是:若长连接在2个小时(保活定时)内无任何反应,Server便向Client发送探测报文段,此时可能有4种结果:
Client正常运行,且正常响应:
则Server保活定时复位(Reset)。Client崩溃/重启,,无法响应:
Server继续每隔75秒发送一次探测报文段,共发送10次。若Client仍然没有响应,则关闭连接(CLOSED)。Client崩溃后重启,一开始无响应,后来正常:
重启连接(连接已经中断,物是人非)。Client正常运行,但探测报文段不可达(Client无响应):
同第二点。
HTTP的短连接
HTTP的短连接实际上是由于HTTP的特性(无连接)决定的。
所以,让我们引入HTTP的两个特性:无连接、无状态。
HTTP是无连接的
每次只处理一个请求,处理完(收到Client应答)就断开。
解决:Keep-Alive机制。
HTTP是无状态的
每一次打开网页都完全独立。
解决:
Cookie:
存储在浏览器(Bowser)中,由Server生成
下一次请求该网站时,会把该Cookie发送给Server
不安全(在Server之外被非法读写)Session
存储在Server,较安全
但是Server需要Client提供Session_id才能找到对应Session
Session_id通常使用Cookie存储Token
可抵抗CSRF(跨站请求伪造)JWT
HTTPS
HTTP的端口默认是80;HTTPS则是443。
HTTP基于TCP,明文传输;HTTPS基于HTTP + SSL,通过对称加密与非对称加密传输。下面我顺便简单介绍一下对称加密以及非对称加密,不感兴趣的同学可以直接跳过此部分。
对称加密
只有一个密钥,同时负责加密、解密,很好理解。
常见算法:DES、AES等。
非对称加密
有成对的密钥,称为 公钥 + 私钥,无法相互推导。一个加密,另一个解密。
常见算法:RSA、DSA等。
这里举个栗子,强化大家的理解,是一个非常有趣的数学算法。
1 |
|
怎么样,是不是非常简单易懂~ 这就是非对称加密的核心内容。这只是一个非常简单的示例,可能放在今天,随随便便的一台个人计算机就可以根据公钥20201破解出私钥19801。但是在没有计算机的年代,靠大量人工的算力也无法通过公钥破解出私钥。随着学者在数学领域的探索,非对称加密的实际应用早已结合了各种前沿的数学运算。当然了,这些都不是我等搬砖狗深究之事~
SSL原理
非对称加密虽然十分安全,但是性能比起对称加密则十分低下。而Bowser与Server之间的数据交互十分频繁,采用非对称加密显然不合适。
在SSL中,采用了非对称加密与对称加密相结合的方式。即Server通过非对称加密,把对称加密所使用的密钥,递交给Client。具体的过程,如下图所示:
其中证书验证的环节,我们暂且不细究。此处涉及到的并非纯粹的技术问题,而是类似于互联网规章制度,感兴趣的同学可以自行了解一下。
与Server的四种交互
- GET 查询
- POST 修改
- PUT 增加
- DELETE 删除
实际上,单独的 GET / POST 就可以实现增删改查。
GET是幂等的(对同一个URL,多个请求返回相同结果)。
POST使用必须用到表单Form(所以很多人偷懒使用GET)。
GET与POST的区别:
GET提交的数据明文放在URL后边,不安全。
而POST则是把提交的数据放在HTTP包中加密传输,较为安全。GET提交的数据量较小(最多1024字节)。
POST理论上无限制。
HTTP请求、响应
HTTP请求
HTTP请求包含
- 请求方法(GET/POST)
- 请求头
(空一行,表示请求头结束) - 请求正文
HTTP响应
HTTP响应包含
- 状态行(包含状态码)
- 响应头
(空一行,表示响应头结束) - 响应正文
状态码
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
服务器当前无法处理(过段时间可能恢复)。
除特别声明外,本站所有文章均采用 CC BY-SA 4.0 协议 ,转载请注明出处!