炸裂!万字长文拿下HTTP 我在字节跳动等你!

本文将从以下几个方面进行分享。其中包括HTTP发展史,HTTP缓存代理机制,常用的web攻击,HTTP和HTTPS的流量识别,网络协议学习的工具推荐以及高频HTTP与HTTPS的高频面试题题解等,开工。ps(如果需要带目录pdf,私我)

提纲

提纲

1989年,蒂姆·伯纳斯 - 李(Tim Berners-Lee)在论文中提出可以在互联网上构建超链接文档,并提出了三点.

URI:统一资源标识符。互联网的唯一ID

HTML:超文本文档

HTTP:传输超文本的文本传输协议

1 HTTP应用在哪儿

学习一门知识,采用五分钟时间看看这个知识是干啥的可能会更加有目的性。HTTP可谓无处不在,这里例举出几个。

HTTP应用场景

HTTP应用场景

2 HTTP是什么

HTTP(hypertext transport protocol)翻译过来为"超文本传输协议",文本可以理解为简单的字符文字组合,也可以理解为更为复杂的音频或者图像等。那么将这个词语拆分为三个部分。

超文本传输协议

超文本传输协议

"超文本"和"文本"相比多了一个字"超",这样看来比文本丰富,因为它可以将多种文本/图像等进行混合,更重要的是可以从一个文本跳转到另一个文本(文本连接)。

"传输",传输的过程中需要沟通,沟通即可能一对一沟通也可能一对多沟通(进行内容协商),无论怎么样,参加沟通的人数>1,想尽一切一切办法更快更好的完成相应的任务。

"协议",无规矩不成方圆,做机密项目之前需要签署保密协议,找工作要签"三方协议",三方协议是学校,公司,和个人组成的协议,都是为了让大家受一定的约束,违反了即有相应的惩罚。

三方协议

三方协议

3 不同版本的HTTP

HTTP/0.9

当时网络资源匮乏,0.9版本相对简单,采用纯文本格式,且设置为只读,所以当时只能使用"Get"的方式从服务器获得HTML文档,响应以后则关闭。如下图所示

GET /Mysite.html

响应中只包含了文档本身。响应内容无响应头,无错误码,无状态码,可以说是"裸奔"。

<HTML>
Hello world
</HTML>
HTTP/1.0

此时HTTP/0.9请求过程如下

  • 应用层的HTTP建立在传输层的TCP之上并运用TCP可靠等特性,先三次握手建立连接

  • 客户端请求建立连接(此时只有GET)

  • 服务端响应请求,数据以 ASCII 字符流返回给客戶端

  • 传输完成,断开连接。

HTTP 0.9

HTTP 0.9

HTTP1.0

随着时代的进步,仅仅文本的传输无法满足需求,更多情况需要采用图文的方式才能生动的表达出自己的观点。随着1995年开发出Apache,同时其他的多媒体等技术发展迅速,从而进一步的促使HTTP新功能的出现。HTTP1.0在1996年诞生,增加了一下几个方面:

  • 之前只有Get方法,现在增加Post(加参数),Head方法

  • 加入协议版本号,同时添加文件处理类型

  • 加入HTTP Header,让HTTP处理请求更加灵活

  • 增加响应状态码,标记出错的原因

  • 提供国际化(不同语言)支持

典型的请求过程

GET /image.html HTTP/1.0
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64)

200 OK
Date: Tue, 17 Nov 2020 09:15:31 GMT
Content-Type: text/html
<HTML> 
一个包含图片的页面
  <IMG SRC="/image.gif">
</HTML>

HTTP1.0通信过程

HTTP1.0

HTTP1.0

HTTP /1.1

1995年是不平凡的一年,网景公司和微软开启浏览器大战,谁都想当老大。1999年HTTP/1.1发布并成为标准,写入RFC,以为以后不管是网关还是APP等,只要你要使用HTTP,就得遵守这个标准。

  • 继续增加了PUT等方法

  • 允许持久连接

随着文件越来越大,图片等信息越来越复杂,如果每一次上传下载文件都需要建立连接断开连接的过程将增加大量的开销。为此,提出了持久连接,也就是一次TCP连接可以具有多个HTTP请求。当然持久连接是可选择的,如果考虑关闭,只需要使用Connecttion:close关闭即可。长连接如下图所示

长连接

长连接

  • 强制要求Host头

我们知道,在电商系统中,经常会因为促销活动导致流量飙升,为了缓解流量,其中有种方法即加缓存或者加服务器。如果是单台服务器负载过大,数据库可能分库分表。数据结构算法中分而治之方法亦是如此。那么HTTP中,同样的道理,如果文件太大,就大文件切分为小文件块发送。

HTTP /2

HTTP/1.1的出现,几年间出来大量牛掰的互联网公司,发展实在是太快,但是HTTP1.1中这几点成为诟病

  • 原因1 TCP自带慢启动

顾名思义,"慢启动"从0到1循循渐进。轿车启动不会按下按钮就直接起飞,而是缓慢调节到适合的速度。这不是挺好的?为什么会带来性能问题呢。我们知道一个页面有静态数据,动态页面,很多小文件在加载的过程中就会直接发起请求,这样导致太多的请求都会经历慢启动过程,花费时间太多。

  • 原因2 多条TCP连接带宽竞争

带宽固定,多条TCP连接同时发起竞争带宽资源,由于各个TCP连接之间没有通信机制,也无法得知哪些资源优先级更高,从而导致想快速下载的资源反而延迟下载。

  • 原因3 头部阻塞

阻塞,在网络编程中,我们采用异步,多路复用(epoll)方式尽量让cpu少等待多干事。在HTTP1.1中,虽然大家共用了一条TCP通道,但是第一个请求没有结束,第二请求就阻塞等待,也就是说不能同时发送接收数据。那么一个网页很多数据文件,如果能够同时发出请求,让部分数据文件能够得到响应并预处理,这样就大大的利用了带宽和cpu的资源。基于这些因素,出现了HTTP2

如何解决头部阻塞呢?

HTTP是一问一答的模式,大家都在这个队列排队导致堵塞,那就多个队列并发进行,也就是"对同一个域名发起多个长连接"。举个例子,在火车站排队买票的时候,如果只有一个窗口可用,大家只能苦等,多开几个窗口就可缓解这个问题。

这个时候用户数 * 并发数(上限6-8)已经不错得效果,但是互联网速度太快,火车站就这么大,窗口也就这么多,怎么办,建新的火车站进行分流(大部分城市都有什么东站 西站)。在这里叫做"域名分片",使用多个域名,这些域名指向指向同一服务器。

HTTP/3

HTTP/2看似很完美了吧,但是Google轮子哥可不服,其他人在研究HTTP/2的时候,它们就在琢磨QUIC。那QUIC有啥牛掰的地方呢

QUIC是Google开发的一个基于UDP且能像TCP一样具有可靠性特点的协议。具备像HTTP/2一样的应用数据二进制分帧传输。其主要解决的问题有两个。

  1. 进一步解决线头阻塞问题。通过独立不同流,让各个流之间实现相互独立传输,互不干扰

  2. 切换网络时的连接保持。wifi和3G/4G经常需要

  • 209
    点赞
  • 785
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值