HTTP
什么是HTTP
HTTP(超文本传输协议)是一种允许浏览器向服务器获取资源的协议,是Web的基础,通常由浏览器发起请求,用来获取不同类型的文件,例如HTML文件、CSS文件、JavaScript文件、图片、视频等。
HTTP/0.9
采用了基于请求响应的模式,从客户端发出请求,服务器返回数据。
HTTP/0.9 的实现有以下三个特点。
- 只有一个请求行,并没有HTTP 请求头和请求体
- 服务器也没有返回头信息,只需要返回数据
- 返回的文件内容是以 ASCII 字符流
HTTP/1.0
HTTP/1.0 引入了请求头和响应头,它们都是以为 Key-Value 形式保存的。支持多种类型的文件下载是 HTTP/1.0 的一个核心诉求,而且文件格式不仅仅局限于 ASCII 编码,还有很多其他类型编码的文件
- 在 HTTP 发送请求时,会带上请求头信息,服务器返回数据时,会先返回响应头信息
HTTP/1.0新增的几个典型的特性
- 返回状态码
- 提供了Cache 机制,用来缓存已经下载过的数据
- 请求头中还加入了用户代理的字段,user-agent
HTTP/1.1
HTTP/1.1 中增加了持久连接的方法,它的特点是在一个 TCP 连接上可以传输多个 HTTP 请求,只要浏览器或者服务器没有明确断开连接,那么该 TCP 连接会一直保持。 HTTP/1.1,缝缝补补的改进
- 持久连接
- HTTP/1.1 还引入了客户端 Cookie 机制和安全机制
- 浏览器为每个域名最多同时维护 6 个 TCP 持久连接;
- CDN(内容分发网络)
CDN
- CDN的加速资源是跟域名绑定的。
- 通过域名访问资源,首先是通过DNS分查找离用户最近的CDN节点(边缘服务器)的IP
- 通过IP访问实际资源时,如果CDN上并没有缓存资源,则会到源站请求资源,并缓存到CDN节点上,这样,用户下一次访问时,该CDN节点就会有对应资源的缓存了。
HTTP/2.0
影响 HTTP/1.1 效率的三个主要因素:TCP 的慢启动、多条 TCP 连接竞争带宽和队头阻塞。
引入了多路复用机制
- 通过在协议栈中添加二进制分帧层来实现的
- 有了二进制分帧层还能够实现请求的优先级、服务器推送、头部压缩等特性,从而大大提升了文件传输效率。
多路复用:同一个连接并发处理多个请求
服务器推送:页面请求资源a.css,接到服务器资源的同时会返回a.js,存到缓存中,下次用时不需要访问服务器。
头部压缩:使用HPACK算法进行压缩
其他
http和https区别?
- https是http协议的安全版本,http协议的数据是明文的,https使用SSL/TLS协议进行了加密处理。
- 使用的连接方式不同,http使用tcp,https使用ssl
- 默认端口不一样:http是80,https是443
HTTP的加载过程?
浏览器中的HTTP请求从发起到结束一共经历了如下八个阶段:构建请求、查找缓存、准备IP和端口、等待TCP队列、建立TCP连接、发起HTTP请求、服务器处理请求、服务器返回请求和断开连接。
- 客户端连接web服务器,向服务器的http端口建立tcp连接
- 建立tcp连接后,发送http请求,该请求作为tcp三次握手的第三个报文数据发送给服务器。
- 服务器对浏览器请求做出响应,并把对应的html文本发送给浏览器。
- 释放tcp连接(四次挥手)
- 浏览器将html文本处理并显示内容