趣谈网络协议---HTTP协议:看个新闻原来这么麻烦

HTTP 请求的准备
将域名发送给DNS服务器,解析为IP地址。然后建立TCP连接。HTTP协议大部分为1.1,默认开启Keep-Alive,建立的TCP连接可在多次请求中复用。

HTTP请求的构建
在这里插入图片描述
第一部分:请求行
方法有几种类型。

  • GET,向服务器获取资源。返回的可能是JSON字符串。
  • POST,主动告诉服务端一些信息,这些信息可放在JSON字符串中。往往用来创建一个资源。
  • PUT,向指定资源位置上传最新内容。往往用来修改一个资源。
  • DELETE,删除资源。

第二部分:首部字段
首部是key value,通过冒号分隔。

  • Accept-Charset,表示客户端可以接受的字符集。
  • Contnet-Type,正文的格式,如JSON。
  • Cache-control,控制缓存。当客户端的请求中包含max-age时,如果判定缓存层中,资源的缓存时间比指定时间的数值小,客户端可接受缓存的资源;当max-age为0,缓存层通常将请求转发给应用集群。
  • If-Modified-Since,如果服务器的资源在某个时间后更新了,客户端就应该下载最新下资源;否则,服务端返回“304 Not Modified",客户端就不用下载了,节省带宽。

HTTP返回的构建
在这里插入图片描述
状态码反应HTTP请求的结果。200意味着大吉大利;404意味着服务端无法响应这个请求。短语大概说明一下原因。

首部的key value。

  • Retry-After:客户端应在多长时间后再次尝试一下。503指服务暂时不再和这个值配合使用。
  • Content-Type:可以是HTML,或JSON。

HTTP 2.0
通过头压缩、分帧、二进制编码、多路复用等提升性能。

  • 对HTTP的头进行一定的压缩,将原来每次都要携带的大量key value在两点建立一个索引表,对相同的头只发送索引表中的索引。
  • 将一个TCP的连接中,切分成多个流,每个流都有自己的ID。它是一个虚拟通道,有优先级。
  • 将所有传输信息分割为更小的消息和帧,并采用二进制编码。如Header帧,Data帧,多个Data帧属于同一个流。

通过以上两种机制,HTTP 2.0客户端可将多个请求分到不同的流中,然后将请求内容拆成帧,进行二进制传输。这些帧可打散乱序发送,然后根据每个帧首部的流标识符重新组装,且可根据优先级觉得先处理那个流。

  • 成功解决了HTTP 1.1的队首阻塞问题,也不需要通过HTTP 1.x的pipeline机制用多条TCP连接实行并行请求与响应;
  • 减少了TCP连接数对服务器性能的影响,同时将页面的多个数据css、js、jpg等通过一个数据链路进行传输,加快页面组件的传输速度。

在这里插入图片描述
在这里插入图片描述

QUIC协议的“城会玩”
通过UDP,自定义类似的TCP的连接、重试、多路复用、流量控制,进一步提升性能。

HTTP 2.0 虽然大大增加了并发性,但基于的是TCP,处理包时有严格顺序。前面的stream 2的帧没有收到,后面的stream 1也会阻塞。

机制一:自定义连接机制
基于UDP,在QUIC自己的逻辑中维护连接的机制,以64位的随机数作为ID来标识。

机制二:自定义重传机制
任何一个序列号的包只发送一次 ,下次加1。发送序号为100的包没有收到ACK,下次包的序号是101。如何知道100和101发送的是同样的内容?QUIC定义了一个offset概念。发送的数据在这个数据流里面有个偏移量offset。

机制三:无阻塞的多路复用
QUIC基于UDP,前面的stream 2的帧没有收到,后面的stream 1无需等待。

机制四:自定义流量控制
通过window_update告诉对端可以接受的字节数。但QUIC的窗口是适应自己的多路复用机制的,不但在一个连接上控制窗口,还在一个连接的每个stream控制窗口。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值