1 HTTP概念
HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。
HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。
2 HTTP请求报文的构建
构建为1-4条,全部为获得一个网页的过程:
- 浏览器输入一个URL(Uniform Resources Locator,统一资源定位符)。
- 浏览器将域名发送给DNS服务器,DNS将其解析为IP地址。
- 浏览器与服务器建立TCP连接(端口80),默认开启Keep-Alive模式,支持多次请求复用。
- 浏览器发送HTTP请求。HTTP报文分为三部分:请求行、请求的首部字段、请求的正文实体。
- 服务器通过请求,把首页文件发给浏览器。
- TCP连接释放。
- 浏览器解析首页文件,展示web界面。
请求行的请求方法
GET:去服务端获取资源。
POST:告诉服务度端一些信息。
PUT:向指定资源位置上传最新信息。
DELETE:删除资源。
首部字段有哪些
首部是Key-Value,保存一些重要信息:
Content-Length、Content-Type、Accept-Charset、Cache-Charset等
3 HTTP请求报文的发送
①HTTP是基于TCP的,通过二进制流的方式,面向连接发送给对方。
②通过socket发送到TCP层,二进制流编程一个报文发送给服务端。
③TCP层把源地址和目标地址放到IP头里面,交给IP层进行传输。
④IP层查看目标地址和自己是否在一个局域网中,如果是,通过ARP将源MAC地址和目标MAC地址放到MAC头然后发送;如果不在,把源MAC地址和网关MAC地址放到MAC头发送。
⑤网关收到报文发现MAC地址符合,取出目标IP地址,找到下一跳路由器,到最后一跳的路由器会发现目标地址在自己的某一个局域网上,于是在这个局域网发送ARP,获得这个目标地址的MAC地址,将报文发出去。
⑥目标机器发现MAC符合,就会收报文,如果IP符合,知道自己上一层是TCP,解析TCP的头,找到里面的序列号,如果序列号正确就放入缓存,返回ACK。
⑦HTTP服务器会监听 TCP的端口号,HTTP服务器进程接收报文,得知该请求是访问一个网页,于是把网页发给客户端。
4 HTTP返回报文的构建
返回报文分成三个部分:状态行、首部字段、实体
状态行中的状态码
HTTO返回报文通过相反的过程发送给客户端。P133
5 HTTP特性
具体可看小林第一章 05 HTTP/1.1、HTTP/2、HTTP/3 演变
HTTP的特点
优点:HTTP 最凸出的优点是「简单、灵活和易于扩展、应用广泛和跨平台」。
缺点:1.服务器没有记忆能力,它在完成有关联性的操作时会非常麻烦。
2.明文传输-不安全
HTTP 1.1的特点
1.长连接: 减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载
2.管道网络传输: 可在同一个 TCP 连接里面,客户端可以发起多个请求,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。
3.队头堵塞: 因为当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一同被阻塞了,会招致客户端一直请求不到数据
HTTP 2.0的特点/优点
1.头部压缩: 对HTTP头进行压缩,消除了重复的部分——HPACK算法:在两端建立索引表,对相同的头只发送索引。
2.二进制格式: HTTP/2 不再像 HTTP/1.1 里的纯文本形式的报文,而是全面采用了二进制格式,头信息和数据体都是二进制,并且统称为帧(frame):头信息帧和数据帧。计算机可以直接解析二进制报文。
3.数据流: 将一个TCP连接切分成多个流,每个流都有自己的ID和优先级,流其实是一个虚拟的通道。
4.多路复用: 客户端和服务端可以在一个连接里同时发送多个请求或响应,而且不用按照顺序一一对应,解决了队头堵塞,减少了TCP连接数,加快传输速度。
5.服务器推送: 服务器可以主动发送信息,减少延时等待。
QUIC(HTTP 3.0)
1.自定义连接:基于UDP,IP地址或端口发生变化时,只要64位ID不变,就不需要重新建立连接。
2.自定义重传:通过offset调整RTT,再自适应重传。
3.无阻塞多路复用:一个连接的多个流之间没有依赖,当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响。
4.自定义流量控制:在一个连接的每个流上控制窗口。
5.拥塞控制:TCP的CUBIC拥塞控制算法,窗口增长函数仅仅取决于连续两次拥塞时间的时间间隔值,窗口增长完全独立于RTT。
④-①小结:
①HTTP重点方法:GET、POST、PUT、DELETE,还有几个重要的首部字段。
②HTTP2.0通过头压缩、分帧、二进制编码、多路复用等技术提升性能。
③QUIC协议通过基于UDP自定义的连接、重传、多路复用、流量控制等机制进一步提升性能。