HTTP :Hyper Text Transfer Protocol , 超文本传输协议。这是一个应用非常广泛的网络协议,大量的应用促进了发展,同时也阻碍了发展,每一个版本的制定变成了一件非常谨慎小心的事情。
HTTP 是一个应用层协议,协议中定义 HTTP 建立在一个可靠的协议之上,虽然一般这个可靠的协议就是传输层的 TCP,但不等于只能是 TCP。TLS 和 SSL 都是建立在 TCP 之上,他们也是可靠的协议,并且他们属于应用层。基于 TLS 或者 SSL 的 HTTP 被称为 HTTPS。
一个可靠的底层协议,保证了 HTTP 协议也是一个可靠的协议,所以一个 HTTP 请求肯定可以收到服务器的响应,否则就是请求失败。
HTTP 是一个无状态协议,在两次请求之间,服务器不会保留任何状态信息的。也就是相当于每次请求都是新的,陌生的。这个无状态是相对与有状态来说的,想我之前做过的一个 RTSP 的中间层,那个 RTSP 就是有状态的。播放器和服务器建立一个连接后,服务器保留这播放器的状态,当播放器的状态发生变化的时候,比如 PAUSE,START 等状态码告诉服务器,服务器会根据当前的状态码和刚收到的状态码来做出响应。
在 HTTP 1.0 制定的时候,人们的网上生活并没有那么丰富,所以无状态是一个很好的选择。随着后来技术的发展,网上的应用越来越丰富,人们通过 cookie,session 等技术来实现有状态的沟通,但是,HTTP 本身还是无状态的,及时是 HTTP 2.0。
HTTP 经过了三个版本的更新,已经发生了很大的变化,但是主要的结构还是没有变化的。目前 2.0 还没有大规模使用,1.0 因为历史原因,还有很多服务器在使用,并且可能长期使用。而 1.1 是目前最流行的版本,而且一般 1.1 的服务器同时支持 1.0 。所以,在未来的一段时间内,三个版本还是会长期共存的。
HTTP 1.1 产生的大背景是因为 HTTP 1.0 中,每个请求都需要一次完整的 TCP 三次握手,建立连接,发送数据,接受数据,然后四次握手断开连接。这样带来一个问题就是已经建立的连接用完就被抛弃掉了,像现在主流的网站,一个网页需要发送的请求是很多的,假设一个网页里包含了 100 张图片,那么浏览器需要向服务器发送 100 个图片请求,如果浏览器直接发送100个请求,可能会造成短时间内网络堵塞,请求失败,也可能因为短时间内的大量访问,导致服务器的连接数量太大,处理不过来。一般浏览器为了避免这种情况的发生,会做一个请求队列,避免短时间内发送太多的请求,但这就导致网页打开变慢。
HTTP 1.1 加入了连接复用的概念,还是假设 100 个图片请求,浏览器第一次发送 10 个图片请求,服务器也只接收到 10 个请求,服务器响应结束后,并不会马上关闭连接,而是等待浏览器再次请求,这样可以大大降低连接建立的个数和服务器维护连接数的成本。
现在网页元素是非常丰富的,打开一个网页需要请求上百个请求是很常见的事情,一些大的新闻网站可能会高达几百个请求。及时是 HTTP 1.1 的复用也满足不了需求,而 2.0 还姗姗来迟,在这个过度阶段,人们想出了多域名来解决问题。一般浏览器会限制同一时刻往一个域发送请求的个数,而如果把这些请求分散到不同的域,那么就可以提高浏览器请求的并发数了。而剩下的事情就是搭建更多的主机了。这些主机会被设计为用来负责不同的事务,比如主站用来处理业务逻辑,分站处理一些静态文件的请求,比如图片、网页样式、网页脚本等等。
在此之上,还有更加高级的 CDN,这里就不讨论了。(我也不会啊~~)
随着网络的发展,网络安全越加重要了,因为在网络上传输的已经不仅仅是一些简单的文档,网页了,而可能是一些涉及个人隐私的信息,还有一些跟金钱有关的信息,这个时候,HTTPS 就产生了。HTTPS 在保证安全的同时,牺牲的是效率,一般 HTTPS 的网页打开的速度要比 HTTP 慢很多,因为 HTTPS 不是直接使用的 TCP 而是建立在 TSL 或者 SSL 协议之上的,这降导致一次完整的请求比普通的 HTTP 请求要多了很多次客户端和服务器端的交互。
HTTP 2.0 增加了一个多路复用请求的概念,建立起一次连接后,可以同时发送不同的请求,还是假设 100 张图片,可能只需要建立起一个连接,然后浏览器把 100 个图片的请求同时发送到服务器端,服务器处理后,还是使用这个连接,把 100 个图片的响应交付给浏览器,在这中间,加了一个帧的概念,之前一个独立的请求,在这里变成一个帧。 当然,HTTP 2.0 增加的远远不止这些。
- EOF -
本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动。
转载请注明:文章转载自 Binkery 技术博客 [https://binkery.com]
本文标题: HTTP 协议
本文地址: https://binkery.com/archives/530.html