当前位置: 首页 > news >正文

【网络协议】聊聊http协议

当我们输入www.baidu.com的时候,其实是先将baidu.com的域名进行DNS解析,转换成对应的ip地址,然后开始进行基于TCP构建三次握手的连接,目前使用的是1.1 默认是开启了keep-Alive。可以在多次请求中进行连接复用。
在这里插入图片描述

HTTP 请求的构建

连接建立之后,就要发送HTTP的请求了,
在这里插入图片描述
整体其实就是三部分,请求行,请求首部,请求正文。

请求行

在这里插入图片描述
请求行其实就是一个是请求的域名,然后对应的请求方法,get一般是获取资源,post是修改或者添加资源,delete是修改资源。

首部字段

首部字段中主要是以key:value的形式存储的,
Accept-Charset,表示客户端可以接受的字符集
Content-Type:正文的格式

对于一个web网页来说的话,其实有很多是静态资源,所以一般使用CDN进行加速处理,或者使用专门的静态资源处理器进行处理。
在这里插入图片描述
对于静态资源,有Vanish缓存层,缓存过期的时候,才会访问真正的Tomcat应用集群。
Cache-control是用来控制缓存的,当客户端发送的请求包含max-age指令的时候,判断在缓存层中,资源的缓存时间数值比指定时间的数值小,客户端可以接收缓存,当max-age=0,就需要请求到真是的数据层。

If-Modified-Since,如果服务器的某个资源在某个时间之后更新了,那么客户端就需要下载最新的资源,如果没有更新,返回304,客户端不用下载。

当数据都准备好的时候,就会通过socket将数据发送出去到TCP层。

HTTP 请求的发送

HTTP因为是基于TCP协议的,所以会将数据转换成二进制方式,变成一个一个的报文段。
HTTP是不知道数据丢失的,所以需要TCP这一层进行维护,比如数据没有ACK,就需要重传保证。TCP在发送的时候,会将自己的源IP地址和目标IP地址写上,一层层的传下去,然后通过服务端进行处理,最后返回结果。

HTTP 返回的构建

在这里插入图片描述
状态码会反应HTTP请求的结果,200意外着大吉大利。
Retry-After 表示客户端多久应该在尝试下,Content-Type对应的数据格式

HTTP 2.0

HTTP1.1 其实是一收一发的模式,在实时性和并发性上存在问题,
在这里插入图片描述
HTTP2的特性
传输的数据量的大幅减少,以二进制方式传输,标头压缩。
多路复用及相关功能,消息优先级。
服务器消息推送,并行推送。

如果是接收 一个jpg,js,css 在1.1其实是串行的,但是在2.0中 在一个连接里,客户端和服务端可以同时发送多个请求和回应。
在这里插入图片描述
HTTP2 解决了HTTP1.1的队首阻塞问题,不需要pipeline机制用多条TCP连接实现并行请求与响应,减少TCP连接数对服务器性能的影响。同时可以通过在一个连接中进行数据传输。提升传输速度。

小结

HTTP 协议虽然很常用,也很复杂,重点记住 GET、POST、 PUT、DELETE 这几个方法,以及重要的首部字段;
HTTP 2.0 通过头压缩、分帧、二进制编码、多路复用等技术提升性能
QUIC 协议通过基于 UDP 自定义的类似 TCP 的连接、重试、多路复用、流量控制技术,进一步提升性能。

相关文章:

  • linux中断下文工作队列之延迟工作(中断六)
  • 第三届字节跳动奖学金官宣开奖,13位优秀科研学子每人获10万奖学金
  • 「永不失联」产品创新与升级系列发布,预约直播“即将发车”
  • 结构体内存分配
  • 基于STC系列单片机实现定时器0扫描数码管显示定时器/计数器1作为计数器1产生频率的功能
  • mysql存在10亿条数据,如何高效随机返回N条纪录,sql如何写
  • Android使用Glide类加载服务器中的图片
  • 2023 年 Github 万圣节彩蛋
  • matlabR2021a正版免费使用
  • ardupilot开发 --- 深度相机 篇
  • 高校教务系统登录页面JS分析——西安电子科技大学
  • Java中 #{}和${}的区别
  • 软考系统架构师案例分析知识点整理
  • 警惕听力下降的七大因素,一定要当心
  • C语言 pthread_create
  • 【347天】每日项目总结系列085(2018.01.18)
  • express + mock 让前后台并行开发
  • spring boot 整合mybatis 无法输出sql的问题
  • vagrant 添加本地 box 安装 laravel homestead
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 闭包--闭包之tab栏切换(四)
  • 编写符合Python风格的对象
  • 产品三维模型在线预览
  • 大数据与云计算学习:数据分析(二)
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 诡异!React stopPropagation失灵
  • 基于HAProxy的高性能缓存服务器nuster
  • 正则表达式小结
  • 第二十章:异步和文件I/O.(二十三)
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $.ajax()
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (libusb) usb口自动刷新
  • (定时器/计数器)中断系统(详解与使用)
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (黑马C++)L06 重载与继承
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .equals()到底是什么意思?
  • .form文件_SSM框架文件上传篇
  • .NET Core 2.1路线图
  • .net 流——流的类型体系简单介绍
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET大文件上传知识整理
  • @RunWith注解作用
  • [Android] Implementation vs API dependency
  • [android] 练习PopupWindow实现对话框
  • [Angular] 笔记 18:Angular Router
  • [BROADCASTING]tensor的扩散机制
  • [Contiki系列论文之2]WSN的自适应通信架构