对于HTTP和TLS , 相信很多人都不陌生 , 特别是开发人员 , 这应该是平时经常接触的东西 。但大伙对于这块的知识可能比较零散 , 不是很全面 , 所以小编整理了一下 , 希望能帮助大伙更好的去巩固这方面的知识点 。
HTTP和HTTPSHTTP + 加密 + 认证 + 完整性保护 = HTTPS
我们知道HTTP是明文传输的 , 就必不可免存在如下问题:
- 重要数据被明文获取
- 通信双方可能被伪冒
- 数据被篡改
- 一般获取简单数据用于展示的 , 可能无所谓以上的安全缺陷 。但假如涉及类似银行密码的数据 , 就必须慎重考虑这一点了 。
- 所以能够规避以上缺陷的HTTP就是HTTPS(HTTP Secure) 。
我们都知道OSI7层模型 , 其中HTTP属于应用层协议 , HTTP下一层是TCP(传输层协议) 。完全性是一个难题 , 专注于传输速率的传输层协议TCP为了单一职责的理念 , 自是不会多管闲事去保证安全性而降低自身的传输速率的 。
HTTP本身假如要去保证部分数据的安全性而去专注安全性的开发 , 也是得不偿失 。想到这里 , 很是有一些学JAVA感受到的职责单一、职责分离这样的思想 , 哈哈 。所以应该就是这样 , HTTP与TCP之间再加上一层SSL/TLS(Secure Sockets Layer/Transport Layer Security)协议 。
文章插图
HTTP 请求中的内容HTTP 请求由三部分构成 , 分别为:
- 请求行
- 首部
- 实体
请求方法分为很多种 , 最常用的也就是 Get 和 Post 了 。虽然请求方法有很多 , 但是更多的是传达一个语义 , 而不是说 Post 能做的事情 Get 就不能做了 。如果你愿意 , 都使用 Get 请求或者 Post 请求都是可以的 。
问题:Post 和 Get 的区别?
首先先引入副作用和幂等的概念 。
副作用指对服务器上的资源做改变 , 搜索是无副作用的 , 注册是副作用的 。
幂等指发送 M 和 N 次请求(两者不相同且都大于 1) , 服务器上资源的状态一致 , 比如注册 10 个和 11 个帐号是不幂等的 , 对文章进行更改 10 次和 11 次是幂等的 。因为前者是多了一个账号(资源) , 后者只是更新同一个资源 。
在规范的应用场景上说 , Get 多用于无副作用 , 幂等的场景 , 例如搜索关键字 。Post 多用于副作用 , 不幂等的场景 , 例如注册 。
在技术上说:
- Get 请求能缓存 , Post 不能
- Post 相对 Get 安全一点点 , 因为Get 请求都包含在 URL 里(当然你想写到 body 里也是可以的) , 且会被浏览器保存历史纪录 。Post 不会 , 但是在抓包的情况下都是一样的 。
- URL有长度限制 , 会影响 Get 请求 , 但是这个长度限制是浏览器规定的 , 不是 RFC 规定的
- Post 支持更多的编码类型且不对数据类型限制
首部分为请求首部和响应首部 , 并且部分首部两种通用 , 接下来我们就来学习一部分的常用首部 。
通用首部
文章插图
请求首部
文章插图
响应首部
文章插图
实体首部
文章插图
【开发必备:HTTP 及 TLS】
常见状态码
状态码表示了响应的一个状态 , 可以让我们清晰的了解到这一次请求是成功还是失败 , 如果失败的话 , 是什么原因导致的 , 当然状态码也是用于传达语义的 。如果胡乱使用状态码 , 那么它存在的意义就没有了 。
状态码通常也是面试经常会被考的一道题 。
2XX 成功