当前位置: 首页 > 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 的连接、重试、多路复用、流量控制技术,进一步提升性能。

相关文章:

【网络协议】聊聊http协议

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

图神经网络论文笔记(一)——北邮:基于学习解纠缠因果子结构的图神经网络去偏

作者 :范少华 研究方向 :图神经网络 论文标题 :基于学习解纠缠因果子结构的图神经网络去偏 论文链接 :https://arxiv.org/pdf/2209.14107.pdf        https://doi.org/10.48550/arXiv.2209.14107 大多数图神经网络(GNNs)通…...

java初始化list的几种方式

在Java中初始化List有以下几种常见的方式: 使用Arrays.asList()静态方法: List<Integer> list1 Arrays.asList(1, 2, 3);使用List接口的实现类ArrayList的构造函数: List<String> list2 new ArrayList<>();使用Collections.singletonList() String obj…...

Linux:文件操作

目录 一、关于文件 1、文件类的系统接口 2、文件的含义 二、文件操作 1、C语言文件相关接口 2、系统接口 open close write read 三、文件描述符 关于fd fd的分配规则 输出重定向示例 输入重定向示例 追加重定向示例 dup2函数 缓冲区 stdout与stderr perror…...

vue源码笔记之——运行时runtime

源码中的位运算 按位于 运算 if (shapeFlag & ShapeFlags.TELEPORT) {解释&#xff1a;如果shapFlag本身值为8&#xff0c;type为1的话&#xff0c;那么转换为二进制&#xff08;js都是32位&#xff09;那就是 shapFlag&#xff1a;00000000 00000000 00000000 00001000 …...

MySQL数据库干货_09—— MySQL中的外键约束(Foreign Key)

外键约束(Foreign Key) 添加外键约束 使用DDL语句添加外键约束 ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY( 列 名 ) REFERENCES 参照的表名(参照的列名);示例一&#xff1a; 创建 departments 表包含 department_id 、department_name &#xff0c;location_id。…...

springboot配置https

SSL &#xff1a; secure socket layer 是一种加密协议&#xff0c;SSL主要用于保护数据在 客户端和服务器之间的传输&#xff0c;&#xff0c;防止未经授权的访问和窃取敏感信息 在腾讯云申请ssl证书 申请了之后在我的域名中&#xff0c;&#xff0c;解析 解析了之后&…...

java - IDEA IDE - 设置字符串断点

文章目录 java - IDEA IDE - 设置字符串断点概述笔记END java - IDEA IDE - 设置字符串断点 概述 IDE环境为IDEA2022.3 在看一段序列化的代码, 想找出报错抛异常那个点, 理解一下代码实现. 因为序列化代码实现在第三方jar包中, 改不了(只读的). 根本数不清第几次才会开始报…...

【图像分类】基于计算机视觉的坑洼道路检测和识别(ResNet网络,附代码和数据集)

写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。(专栏订阅用户订阅专栏后免费提供数据集和源码一份,超级VIP用户不在服务范围之内,不想订阅专栏的兄弟们可以私信…...

关于readline方法使用的一个中文乱码引发的思考

故事起源于这段代码&#xff0c;我想给一个本地地址然后去读取文件内容&#xff0c;然后使用了reader.readLine();方法&#xff0c;但是本地没有任何报错&#xff0c;但是线上中文乱码导致直接报错了。 BufferedReader reader;try {reader new BufferedReader(new FileReader(…...

BUUCTF 神秘龙卷风 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 神秘龙卷风转转转&#xff0c;科学家用四位数字为它命名&#xff0c;但是发现解密后居然是一串外星人代码&#xff01;&#xff01;好可怕&#xff01; 密文&#xff1a; 下载附件&#xff0c;解压得到一个.rar压缩…...

【JavaEE初阶】 认识文件与Java中操作文件

文章目录 &#x1f334;认识文件&#x1f6a9;树型结构组织和目录&#x1f6a9;文件路径&#xff08;Path&#xff09;&#x1f6a9;知识扩展 &#x1f38d;Java 中操作文件&#x1f6a9;File 概述&#x1f4cc;属性&#x1f4cc;构造方法&#x1f4cc;方法 &#x1f6a9;File使…...

数据结构───链表

花费一个周时间学完了链表&#xff08;的一部分&#xff09;&#xff0c;简单总结一下。 链表的学习离不开画图&#xff0c;将其抽象成一种逻辑模型&#xff0c;可以减少思考时间&#xff0c;方便理解。 链表大致分为8种结构&#xff0c;自己学习并实现了两种结构&#xff0c;也…...

SQLAlchemy删除所有重复的用户|Counter类运用

Python标准库中的collections模块中的Counter类。Counter类用于计算可迭代对象中元素的出现次数&#xff0c;并以字典的形式返回结果&#xff0c;其中键是元素&#xff0c;值是该元素的出现次数。 for name, count in Counter(names).items() 是一个循环语句&#xff0c;它用于…...

Lec11 Thread switching (Robert)

线程的概念 线程就是单个串行执行代码的单元&#xff0c;它只占用一个CPU并且以普通的方式一个接一个的执行指令。 线程还具有状态&#xff0c;我们可以随时保存线程的状态并暂停线程的运行&#xff0c;并在之后通过恢复状态来恢复线程的运行。 程序计数器&#xff08;Progr…...

前端的简单介绍

前端核心的分析 CSS语法不够强大&#xff0c;比如无法嵌套书写&#xff0c;倒是模块化开发中需要书写很多重复的选择器 没有变量和合理的样式复用机制&#xff0c;使逻辑上相关的属性值必须字面量的心事重复的输出&#xff0c;导致难以维护 CSS预处理器,减少代码的笨重&#…...

云服务器 centos 部署 code-server 并配置 c/c++ 环境

将你的云服务器改为 centos 8 为什么要将云服务器的操作系统改成 centos 8 呢&#xff1f;原因就是 centos 7 里面的配置满足不了 code-server 的需求。如果你使用的是 centos 7 那么就需要你升级一些东西&#xff0c;这个过程比较麻烦。我在 centos 7 上面运行 code-server 的…...

Ubuntu 22.04 安装 Terraform

Ubuntu 22.04 安装 Terraform 安装 Terraform 安装 Terraform sudo apt updatesudo apt install software-properties-common gnupg2 curlcurl https://apt.releases.hashicorp.com/gpg | gpg --dearmor > hashicorp.gpgsudo install -o root -g root -m 644 hashicorp.gpg…...

MLF - 麻辣粉

MLF全称中期借贷便利&#xff08;Medium-term lending Facility&#xff09;,理解为央行向商业银行、政策银行发放的贷款&#xff0c;但需要符合一定要求才可向央行申请。银行通过MLF向央行借款的时候&#xff0c;需要提供担保品。一般为国债、央行票据、政策性金融债、地方债、…...

Flutter三棵树的创建流程

一、Flutter常见的家族成员 Widget常见的家族成员 Element常见的家族成员 Render常见的家族成员 二、示例代码对应的Flutter Inspector树 示例代码&#xff1a;MyApp->MyHomePage->ErrorWidget&#xff0c;包含了StatelessWidget、StatefulWidget、LeafRenderObjectWid…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...