14 http协议详解

1、http是应用层协议

统一资源定位符:
例如 http://www.jd.com是个URL,http是协议,www.jd.com是域名,表示互联网上的一个位置,有些url的资源定位会更清晰,比如http://www.jd.com/index.html

2、HTTP 请求的准备
1.浏览器会将 www.jd.com 这个域名发送给 DNS 服务器,让它解析为 IP 地址.(后面的文章会详解DNS)
2.建立 TCP 连接,目前使用的 HTTP 协议大部分都是 1.1。在 1.1 的协议里面,默认是开启了 Keep-Alive 的,这样建立的TCP 连接,就可以在多次请求中复用。
3.建立了连接以后,浏览器就要发送 HTTP 的请求,请求报文格式如下:

在这里插入图片描述
第一部分:请求行

  1. 在请求行中,URL 就是 http://www.163.com ,版本为 HTTP 1.1。
  2. 方法分为:GET,POST,PUT
    在实际使用过程中,POST,PUT有稍许的区别。POST 往往是用来创建一个资源的,而 PUT 往往是用来修改一个资源的。

第二部分:首部字段
3. 首部是 key value,通过冒号分隔。
例如,Accept-Charset,Content-Type等
4. 此处需要强调一点的是缓存,比如电商系统的商品页面,热点数据,秒杀场景下,需要做成缓存的,架构基本如下所示:
在这里插入图片描述
后面的文章会详解DNS和CDN,此处只简单说明Nginx.
Nginx是如何处理Http协议的呢?
5. 对于静态资源,有 Vanish 缓存层。当缓存过期的时候,才会访问真正的 Tomcat 应用集群。

1.HTTP 头里面,Cache-control是用来控制缓存的。
2.当客户端发送的请求中包含 max-age 指令时,如
  果判定缓存层中,资源的缓存时间数值比指定时间的数值小,那么客户端可以接受缓存的资源;当指定max-age 值为 0,那么缓存层通常需要将请求转发给应集群。
3.If-Modified-Since也是一个关于缓存的。也就是说,如果服务器的资源在某个时间之后更新了,
  那么客户端就应该下载最新的资源;如果没有更新,服务端会返回“304 Not Modified”的响应,那客户端就不用下载了,也会节省带宽。

HTTP 请求的发送

1.HTTP 协议是基于 TCP 协议的,所以它使用面向连接的方式发送请求,通过 stream 二进制流的方式传给对方
2.到了 TCP 层,它会把二进制流变成一个个的报文段发送给服务器。
3.在发送给每个报文段的时候,都需要对方有一个回应 ACK,来保证报文可靠地到达了对方。
4.如果没有回应,那么 TCP 这一层会进行重新传输,直到可以到达。同一个包有可能被传了好多次。
5.TCP 层发送每一个报文的时候,都会加上源地址和目标地址,放到 IP 头里面,交给 IP 层进行传输。
6.IP 层需要查看目标地址和自己是否是在同一个局域网。如果是,就发送 ARP 协议来请求这个目标地址对应的 MAC 地址,然后将源 MAC 和目标 MAC 放入 MAC 头,发送出去即可。
7.如果不在同一个局域网,就需要发送到网关,还要需要发送 ARP 协议,来获取网关的 MAC 地址,然后将源 MAC 和网关 MAC放入 MAC 头,发送出去。
8.网关收到包发现 MAC 符合,取出目标 IP 地址,根据路由协议找到下一跳的路由器,获取下一跳路由器的 MAC 地址,将包发给下一跳路由器。
9.这样路由器一跳一跳终于到达目标的局域网。这个时候,最后一跳的路由器能够发现,目标地址就在自己的某一个出口的局域网上。于是,在这个局域网上发送 ARP,获得这个目标地址的 MAC 地址,将包发出去。
10.目标的机器发现 MAC 地址符合,就将包收起来;发现 IP 地址符合,根据 IP 头中协议项,知道自己上
   一层是 TCP 协议,于是解析 TCP 的头,里面有序列号,需要看一看这个序列包是不是我要的,如果是就放入缓存中然后返回一个 ACK,如果不是就丢弃。
11.TCP 头里面还有端口号,HTTP 的服务器正在监听这个端口号。于是,目标机器自然知道是 HTTP 服务
   器这个进程想要这个包,于是将包发给 HTTP 服务器。HTTP 服务器的进程看到,原来这个请求是要访问一个网页,于是就把这个网页发给客户端

至此,一个http的页面请求就完成了。

HTTP 返回的构建

  1. HTTP 的返回报文也是有一定格式的。也是基于 HTTP 1.1
    在这里插入图片描述
  2. 状态码会反应 HTTP 请求的结果
  3. 首部key value
    Content-Type
    Retry-After表示,告诉客户端应该在多长时间以后再次尝试一下。“503 错误”是说“服务暂时不再和这个值配合使用”。
  4. 然后把刚才的发送过程反向走一遍。虽然两次不一定走相同的路径,但是逻辑过程是一样的,一直到达客户端。

当浏览器拿到了 HTTP 的报文。发现返回“200”,一切正常,于是就从正文中将 HTML 拿出来。HTML 是一个标准的网页格式。浏览器只要根据这个格式,展示出一个绚丽多彩的网页。
这就是一个正常的 HTTP 请求和返回的完整过程。

HTTP 2.0

  1. HTTP 1.1 在应用层以纯文本的形式进行通信,每次通信都要带完整的 HTTP 的头,而且不考虑 pipeline模式的话,每次的过程总是像上面描述的那样一去一回。这样在实时性、并发性上都存在问题。
  2. 为了解决这些问题,HTTP 2.0 会对 HTTP 的头进行一定的压缩,将原来每次都要携带的大量 key value在两端建立一个索引表,对相同的头只发送索引表中的索引。
  3. HTTP 2.0 协议将一个 TCP 的连接中,切分成多个流,每个流都有自己的 ID,而且流可以是客户端发往服务端,也可以是服务端发往客户端。
  4. 其实只是一个虚拟的通道。流是有优先级的。
  5. HTTP 2.0 还将所有的传输信息分割为更小的消息和帧,并对它们采用二进制格式编码。常见的帧有Header 帧,用于传输 Header 内容,并且会开启一个新的流。再就是Data 帧,用来传输正文实体。多个 Data 帧属于同一个流
  6. 通过这两种机制,HTTP 2.0 的客户端可以将多个请求分到不同的流中,然后将请求内容拆成帧,进行二进制传输。这些帧可以打散乱序发送, 然后根据每个帧首部的流标识符重新组装,并且可以根据优先级,决定优先处理哪个流的数据。
    举例
假设我们的一个页面要发送三个独立的请求,一个获取 css,一个获取 js,一个获取图片 jpg。如果使用
HTTP 1.1 就是串行的,但是如果使用 HTTP 2.0,就可以在一个连接里,客户端和服务端都可以同时发送多个请求或回应,而且不用按照顺序一对一对应。

HTTP 2.0 其实是将三个请求变成三个流,将数据分成帧,乱序发送到一个 TCP 连接中。
优点
7. HTTP 2.0 成功解决了 HTTP 1.1 的队首阻塞问题,
8. 也不需要通过 HTTP 1.x 的 pipeline 机制用多条 TCP 连接来实现并行请求与响应;减少了 TCP 连接数对服务器性能的影响

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/120620.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Solidity】Solidity中的基本数据类型和复合数据类型

1. 基本数据类型 1.1 整数类型 Solidity支持有符号整数和无符号整数,可以指定位数和范围。以下是一些整数类型的示例: int:有符号整数,可以是正数或负数。2,-45,2023 uint:无符号整数&#x…

TLS回调函数

TLS在逆向中的作用 TLS回调函数常用于反调试 TLS先于EP代码执行 TLS是什么 TLS是各线程的独立的数据存储空间 使用TLS技术可以在线程内部独立使用或修改进程的全局数据或静态数据 创建和终止某进程时,TLS回调函数都会自动调用执行 使用OD调试TLS函数

云尘靶场 --JIS-CTF-VulnUpload

重新下vpn连接的文件 还是fscan扫 访问一下13 到了/login.php 随便弱口令试试 好吧没成功,那目录扫描一下 那就先看一下robots.txt了 flag有点快的 抱着试一试的态度看一下admin_area 没想到源代码里面居然有 这么这么多 本来还以为密码要去爆破的&#xff0…

刚柔相济铸伟业 ——访湖南顺新金属制品科技有限公司董事长张顺新

时代在变,唯初心不改。 精致、谦虚、谨慎、儒雅、温和——他就是张顺新,湖南顺新金属制品科技有限公司、湖南顺新供应链管理有限公司董事长,民建长沙市委常委,民建湖南省环资委副主任,省、市民建企联会常务副会长&…

大文件传输小知识 | UDP和TCP哪个传输速度快?

在网络世界中,好像有两位“传输巨头”常常被提起:UDP和TCP。它们分别代表着用户数据报协议和传输控制协议。那么它们是什么?它们有什么区别?它们在传输大文件时的速度又如何?本文将深度解析这些问题,帮助企…

大数据Doris(十九):数据导入(Load)

文章目录 数据导入(Load) 一、Broker load 二、Stream load 三、Insert 四、Multi load

10 DETR 论文精读【论文精读】End-to-End Object Detection with Transformers

目录 DETR 这篇论文,大家为什么喜欢它?为什么大家说它是一个目标检测里的里程碑式的工作?而且为什么说它是一个全新的架构? 1 题目 2摘要 2.1新的任务定义:把这个目标检测这个任务直接看成是一个集合预测的问题 2.…

博途PLC增量式PID(支持正反作用和归一化输出)

博途PLC增量式PID算法详细介绍请参考下面文章链接: 【精选】博途1200/1500PLC增量式PID算法(详细SCL代码)_西门子博途pid csdn_RXXW_Dor的博客-CSDN博客文章浏览阅读3.4k次,点赞2次,收藏12次。SMART200PLC增量式PID可以参看下面这篇博文,文章里有完整的增量式PID算法公式,…

【JavaSE】基础笔记 - 类和对象(下)

目录 1、this引用 1.1、为什么要有this引用 1.2、什么是this引用 1.3、 this引用的特性 2、 对象的构造及初始化 2.1、 如何初始化对象 2.2、构造方法 2.2.1、概念 2.2.2、特性 2.3、默认初始化 2.4、就地初始化 上篇:【JavaSE】基础笔记 - 类和对象&#…

要在CentOS中安装Docker

Docker部署 在CentOS中安装Docker要在CentOS中安装Docker,请按照以下步骤进行操作:启动和校验常用命令查看容器启动容器 配置镜像加速 在CentOS中安装Docker 要在CentOS中安装Docker,请按照以下步骤进行操作: 首先,确…

c语言从入门到实战——函数递归

函数递归 前言1. 递归是什么?2. 递归的限制条件3. 递归举例3.1 举例1:求n的阶乘3.1.1 分析和代码实现3.1.2 画图推演 3.2 举例2:3.2.1 分析和代码实现3.2.2 画图推演 4. 递归与迭代 前言 函数递归是指一个函数直接或间接地调用自身&#xff…

AirTag追踪汽车

美国华盛顿特区,11月4日,在一项全新的抗击车辆盗窃的措施中,市长穆里尔•鲍泽签署了一项新计划,将向该市车辆盗窃频率较高的社区居民免费提供苹果AirTag追踪器。 AirTag是苹果公司推出的一款蓝牙跟踪设备,它依靠Findm…

Android sqlite 使用简介

进行Android应用开发时经常会用到数据库。Android系统支持sqlite数据库,在app开发过程中很容易通过SQLiteOpenHelper使用数据库,SQLiteOpenHelper依赖于Context对象,但是基于uiatomator1.0和Java程序等无法获取Context的应用如何使用数据库呢…

JavaWeb课程复习资料——idea创建JDBC

1、创建空的Java Project 输入项目名称 空项目 2、引入jar包步骤 依次点击 File -> Project Structure(快捷键 Ctrl Alt Shift s),点击Project Structure界面左侧的“Modules”如图: 在 【Dependencies】 标签界面下&…

Bean的四种实例化方式以及BeanFactory和FactoryBean的区别

2023.11.8 Spring为Bean提供了多种实例化方式,通常包括4种方式。 第一种:通过构造方法实例化第二种:通过简单工厂模式实例化第三种:通过factory-bean实例化第四种:通过FactoryBean接口实例化 通过构造方法实例化 创…

【Linux】vim

文章目录 一、vim是什么?二 、命令模式三、插入模式四、底行模式五、vim配置 一、vim是什么? Vim是一个强大的文本编辑器,它是Vi的增强版,支持多种语法高亮、插件扩展、多模式操作等功能。Vim有三种基本的工作模式:命…

2023年【电工(中级)】模拟考试题及电工(中级)复审模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 2023年【电工(中级)】模拟考试题及电工(中级)复审模拟考试,包含电工(中级)模拟考试题答案和解析及电工(中级)…

《强化学习与机器人控制》:探索深度学习的应用宝典

《强化学习与机器人控制》是一本涵盖了广泛主题的深度著作,它不仅介绍了人机交互控制和强化学习的基本原理,还深入探讨了无模型强化学习控制器以及其在机器人控制中的应用。这本书对于研究生和执业工程师来说是一本极具价值的参考书,它为读者…

go程序获取工作目录及可执行程序存放目录的方法-linux

简介 工作目录 通常就是指用户启动应用程序时,用户当时所在的文件夹的绝对路径。 如:root用户登录到linux系统后,一顿cd(change directory)后, 到了/tmp文件夹下。此时,用户要启动某个应用程序&#xff0…

基于Kinect 动捕XR直播解决方案 - 技术实现篇

一 安装与部署 1. 安装与部署Kinect-v2设备: 安装硬件: Kinect-v2设备带线一台; Kinect-v2 原装适配器适配器组合件设备一台; Kinect-v2 USB 3.0 WIndows PC 一天,原主板支持USB3.0接口; Windows PC 系统 Win10( Win 10 Version 21H2更新, 基于x64系统), 特别…