HTTP–你需要知道的小知识
总结与《图解HTTP》& 详解HTTP2四大核心特性
URI 和 URL 的区别
- URI 是用字符串标识某一互联网的资源
- URL 是表示资源的地点(互联网上所处的位置)
- URI 包括 URL,URL 是 URI 的子集
HTTP 1.1 默认持久链接(即长链接)
- 长链接:
- http 在传输操作频繁,频繁请求资源的情况下为了减少 TCP 不断建立连接的消耗适用于长链接
- 缺点是链接数不能过多,服务器每多一个请求就要去维护一个链接当链接数特别多时,服务器的负载会越来越重
- 短连接:
- 在并发量大,用户操作不频繁时用短链接好否则维护链接是笔巨大的开销
一台虚拟机主机可以存在多个域名
- 即一个 ip 地址对应多个域名,这个可以通过 request header 中的 host 首部字段来区分要响应哪一个对应的页面
代理和网关的区别
- 网关和代理的机制十分相似,而网关能使通信新路上的 服务器提供非 HTTP 协议服务,利用网关也可以提高通信的安全性,因为可以在客户端与网关之间的通信线路上进行加密确保安全
首部字段
Cache-Control
- no-cache:的意思并不是不缓存,而是不缓存过期的资源
- no-store:这个是真正的不缓存
- max-age:资源作为缓存的最长时间
- min-fresh:比如设定 60,则在这60s内超过期限的缓存都不能返回响应
- max-stale:接受过期缓存
Connection
- 控制代理不再转发首部字段
- 管理持久链接
Expires & max-age
- Expires 绝对过期时间(http 1.0)
- max-age 相对过期时间 (http 1.1)
DNT
DNT(Do Not Track)意思是拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法
- 0:同意被追踪
- 1:不同意被追踪
HTTP 是无状态协议
- 也就是说这个协议本身不会记录任何请求和响应的信息,就算是同一个客户端刚发完请求,它又发来一个请求时,服务器端也根本不认识,两个请求之间没有任何联系。
- 因为无状态所以造成的 header 头部特别大
- 解决方法:cookie 客户端记录信息、session 服务端记录信息,缓存代理记录信息
HTTP 1.0 和 HTTP 1.1 的区别
- 长短链接
- HTTP 1.0 默认采用短链接
- HTTP 1.1 默认采用长链接,而且 HTTP 1.1 的长链接有非流水线方式和流水线方式
- 流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。
- 与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。
- 缓存处理
- HTTP 1.0 主要使用 header 里的 If-Modified-Since,Expires 来作为缓存判断的标准
- HTTP 1.1 引入了更多的缓存控制策略,max-age 来表示相对的存活时间
- 带宽的优化
- HTTP 1.0 即使客户端只想要对象的一部分,服务器也只能将整个对象传过来,造成带宽的浪费
- HTTP 1.1 加入了 Range 首部字段,用来允许传送对象的某个部分,支持断点续传
- 新增了错误状态响应码
HTTP 2 的认识
大家可以通过该链接来直观感受一下 http 和 http 2 速度的差异
二进制流
- HTTP2采用的是二进制格式传输数据,而HTTP 1.1采用的是文本形式
- 二进制协议解析起来更高效,而且分割为更小的帧,采用二进制编码
多路复用
- 解决了 HTTP 1.x 的只能串行传输的问题,也就是说我长连接虽然只建立一次连接但是传输的过程还得一个一个的传。
- 而 HTTP 2 单个链接可以承载任意的双向数据流,并行的发送多个请求,性能得到极大的提升.
头部压缩
- 开发了专门的”HPACK”算法,建立了动态表和静态表,采用了哈夫曼编码来压缩整数和字符串
例如下图中的两个请求, 请求一发送了所有的头部字段,第二个请求则只需要发送差异数据,这样可以减少冗余数据,降低开销。
Server Push
- 改变了传统的 “ 请求-应答 ” 模式,不再是单一的由客户端发起访问,而是服务器也可以向客户端推送消息
- 比如,在浏览器刚请求HTML的时候就提前把可能会用到的JS、CSS文件发给客户端,减少等待的延迟,这被称为”服务器推送”( Server Push,也叫 Cache push)。
HTTP 与 HTTPS 的区别
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
- 端口:
- http :80,https:443
- 安全性和资源消耗
- HTTP 使用明文传输内容,即使你用 post 传输一样是不安全的
- HTTP 不能验证通信方的身份,可能会遭遇伪装
- HTTP 无法证明报文的完整性,有可能中间被篡改
- HTTPS 更加消耗资源(加密解密)
- HTTP + SSL/TLS = HTTPS ,在加密前,http 是直接运行在 tcp 上的,加密后 http 先和 SSL/TLS 打交道,然后 SSL/TLS 再和 tcp 打交道,SSL/TLS 本身也是独立的可以用在不同的协议上来进行加密
- 而 HTTPS 采用的是混合加密的方式:共享密钥(对称加密)和公共密钥(非对称加密)的方式混合加密。也就是说先用非对称加密的方式传输加密要用的密钥,然后再用密钥完成剩下数据的传输。
HTTPS 加密流程
- 首先要知道数字证书这个东西,由数字证书认证机构颁布(值得信赖的第三方)。我们想要实现上面的认证和完整性保护就要用到证书这个东西
- 我们的浏览器都会内置一些第三方认证机构的公钥,而服务器会把自己的公钥登录认证机构进行认证,认证机构会用密钥进行数字签名并颁发公钥证书(数字签名+服务器公钥)。
- 客户端拿到公钥证书后会用认证机构的公钥去认证这个公钥证书的正确性,认证通过后双发即能确认通信的各方。
- 然后客户端发送数据用服务器的公钥加密,服务器再用自己的私钥解密,就完成了数据的完整加密的传输。