HTTP/1.1优化措施
创始人
2024-06-03 08:54:34
0

日升时奋斗,日落时自省 

目录

1、减少重复数据的HTTP请求

 2、减少HTTP请求次数

<1>减少重定向请求次数

<2>资源合并

<3>延迟请求

3、降低HTTP响应的数据大小

<1>无损压缩

<2>有损压缩


HTTP优化总体分为以下三种:

(1)针对HTTP请求重复的数据处理

<1>重复数据缓存下来,下次请求时直接使用就行,不用再次请求

(2)针对HTTP请求次数

<1> 将原本由客户端处理的重定向请求,交给代理服务器处理,这样可以减少重定向请求的次数

<2>将多个小资源合并成一个大资源再传输,能够减少HTTP请求次数以及头部的重复传输,再来减少TCP连接数量,进而省去TCP握手和慢启动的网络消耗

<3>按需访问资源,只访问当前用户看得到 / 用得到的资源,当客户往下滑动,再访问接下来的资源,以此达到延迟请求,也就减少了同一时间的HTTP请求次数

(3)针对HTTP响应的数据大小

对于HTTP的请求和响应,通常HTTP的响应的数据大小会比较大,数据大小影响到网络传输的效率,跟我常见方法相通压缩操作,降低数据大小提高网络传输

1、减少重复数据的HTTP请求

针对请求响应不免会有一些重复操作,相同操作持续性,那每次都进行HTTP请求,但是数据都是一样的,此时就凭空增加了服务器的负荷量,可以把该请求针对响应的数据缓存到本地,下一次读取本地的数据,不必在通过网络获取服务器的响应了,这样不就更快了

HTTP请求中的方法通过缓存技术,其中HTTP协议的头部有不少的缓存字段来处理

缓存技术:当客户端向服务器请求资源时,会先抵达浏览器,如果浏览器有“要请求资源”的副本,就可以直接从浏览器中提取而不是从原始服务器中提取这个资源

细致化缓存处理:

http缓存都是从第二次请求开始的,第一次请求资源时,服务器返回资源,并在response header中回传资源的缓存参数;第二次请求时,浏览器判断这些请求参数,命中强缓存就直接200,否则就把请求参数添加到request header头中传给服务器,看是否命中协商缓存,命中返回304,否则服务器会返回新的资源

 针对过期有两种理解,一种理解是真过期了,还有一种理解就是原来的响应更新了,那此时第二种情况就出现问题了,客户端不知道响应更新了咋办???

但是针对这种情况,服务器再发送HTTP响应中,会预估一个过期时间,并把这个信息放到响应头中,这样客户端在查看响应头部的信息时,一旦发现缓存的响应是过期的,会重新发送网络请求

针对以上情况是应该会免除我们所设想的情况(临时更新,缓存失效),但是不是所有的情况都如意,如果过期时间已经到了,需要客户端重新发送请求,那此时的服务器的资源仍然没有改变,那不又是凭空增大了HTTP请求的负荷量

那会如何处理,能优化性能,需要客户端在重新发送请求时,在请求的Etag头部带上第一次请求的响应头的摘要,ETag 响应标头的值是服务器生成的任意值,因此服务器可以根据他们选择的任何方式自由设置值,该响应资源具有唯一标记,如果该响应是陈旧的,则客户端获取缓存响应的 ETag 响应标头的值,并将其放入 If-None-Match 请求标头中,以询问服务器资源是否已被修改;

结果一:如果服务器为请求的资源确定的 ETag 标头的值与请求中的 If-None-Match 值相同,则服务器将返回 304 Not Modified,继续使用原来的

结果二:如果服务器确定请求的资源现在应该具有不同的 ETag 值,则服务器将其改为 200 OK 和资源的最新版本进行响应

 2、减少HTTP请求次数

<1>减少重定向请求次数

 HTTP 协议中,操作由服务器向请求发送特殊的响应而触发。 响应包含以 3 开头的 状态码 ,以及 Location 标头,其保存着的 URL。 浏览器在接收到时,它们会立刻加载 Location 标头中提供的新 URL,此时告诉客户端资源已经迁移到另外一个网址了,客户端需要再次向发送新网址发送请求获取服务器的资源。

 以上看到重定向会带来多一次的请求的,就意味着重定向的次数越多,那么客户端就要多次发起HTTP请求,每一次的HTTP请求都得经过网络,增加了请求的载荷,同样会降低网络效率

使用代理服务器看起来是比较慢的,中间多了一个中间人进行操作,通信就需要两次了

怎么解决重定向多次请求带来的网络影响??

(1)通过代理服务器来完成重定向工作减少HTTP请求次数

(2) 代理服务器能知晓重定向操作,能在代理服务器中处理掉部分的重定向工作的请求次数将会更少

注:重定向是以3开头的状态码

<2>资源合并

以文件为例,每个文件都会有一次请求,那将所有文件合并成一个大文件,总量都是一样的,合并以后只需要一次请求就行了,也就意味着减少了重复发送的HTTP请求

浏览器一般会发送多个请求,每个请求都是不同会有TCP连接,合并请求后也会也减少了TCP连接的数量,减少了TCP连接(就是减少了TCP握手)和慢启动过程消耗的时间

举例:

合并CSS和JavaScript文件最小化,组合CSS和JavaScript文件也是减少网站总文件大小,就是将所有的CSS和JavaScript文件合并为了一个单独的文件,假设你的网站有4个外部JavaScript文件和3个外部CSS文件,意味着需要7个请求

但是,如果将CSS文件合并为一个CSS文件,并将4个JS文件合并为一个JS文件,你的网站就需要两个请求,而不是7个请求

注:这里不是说CSS叠在一个文件里写的,而是将文件合成一个大文件进行请求

引发问题:合并带来的问题给到客户端,如果小资源改变了,导致大资源在客户端这边下载的时候就要重新开始,需要额外的网络消耗

<3>延迟请求

一个页面可能包含许多图像,当用户访问该页面时,您的站点将针对所有这些图像发送HTTP服务器请求,根据您的网页有多沉重,这可能会使它变慢;但是,如果用户甚至没有打算向下滚动到页面底部看其他内容的想法,那不是就成了无故加载,无端消耗资源

延迟加载技术就解决了这个问题,代替发送不必要的HTTP请求,仅仅用户向下滚动到页面上的图像时发送服务器请求,延迟加载技术对资源智能利用可以显得减少HTTP请求数量。

3、降低HTTP响应的数据大小

每一种文件类型都会存有冗余,也就是浪费的空间,如果文件冗余大的话,空间浪费也就多,响应数据大小也就是受之影响,针对回收这些浪费空间的需求,设计了可以应用于特定用途的文件类型的经过优化的算法,用于文件的压缩算法可以大致分为以下两类:

<1>无损压缩

在压缩与解压缩的循环期间,不会对要恢复的数据进行修改。复原后的数据与原始数据是一致的(比特与比特之间一一对应)。对于图片文件来说,gif 或者 png 格式的文件就是采用了无损压缩算法。

注:gzip 应用最广泛

压缩算法上也是会有选择的,浏览器和服务器之间会使用主动协商机制,其中浏览器会是有Accept-Encoding标头,包含了所支持的压缩算法(存在优先级),服务器选择后发送Content-Encoding标头来告知浏览器选哪一种

<2>有损压缩

在压缩与解压缩的循环期间,会对原始数据进行修改,但是会(希望)以用户无法觉察的方式进行。网络上的视频文件通常采用有损压缩算法,jpeg 格式的图片也是有损压缩。

注:一些特定的文件格式既可以采用无损压缩算法,又可以采用有损压缩算法;其中有损压缩通常会比无损压缩效率更高一些。

相关内容

热门资讯

122.(leaflet篇)l... 听老人家说:多看美女会长寿 地图之家总目录(订阅之前建议先查看该博客) 文章末尾处提供保证可运行...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
育碧GDC2018程序化大世界... 1.传统手动绘制森林的问题 采用手动绘制的方法的话,每次迭代地形都要手动再绘制森林。这...
Vue使用pdf-lib为文件... 之前也写过两篇预览pdf的,但是没有加水印,这是链接:Vu...
PyQt5数据库开发1 4.1... 文章目录 前言 步骤/方法 1 使用windows身份登录 2 启用混合登录模式 3 允许远程连接服...
Android studio ... 解决 Android studio 出现“The emulator process for AVD ...
Linux基础命令大全(上) ♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维...
再谈解决“因为文件包含病毒或潜... 前面出了一篇博文专门来解决“因为文件包含病毒或潜在的垃圾软件”的问题,其中第二种方法有...
南京邮电大学通达学院2023c... 题目展示 一.问题描述 实验题目1 定义一个学生类,其中包括如下内容: (1)私有数据成员 ①年龄 ...
PageObject 六大原则 PageObject六大原则: 1.封装服务的方法 2.不要暴露页面的细节 3.通过r...
【Linux网络编程】01:S... Socket多进程 OVERVIEWSocket多进程1.Server2.Client3.bug&...
数据结构刷题(二十五):122... 1.122. 买卖股票的最佳时机 II思路:贪心。把利润分解为每天为单位的维度,然后收...
浏览器事件循环 事件循环 浏览器的进程模型 何为进程? 程序运行需要有它自己专属的内存空间࿰...
8个免费图片/照片压缩工具帮您... 继续查看一些最好的图像压缩工具,以提升用户体验和存储空间以及网站使用支持。 无数图像压...
计算机二级Python备考(2... 目录  一、选择题 1.在Python语言中: 2.知识点 二、基本操作题 1. j...
端电压 相电压 线电压 记得刚接触矢量控制的时候,拿到板子,就赶紧去测各种波形,结...
如何使用Python检测和识别... 车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计...
带环链表详解 目录 一、什么是环形链表 二、判断是否为环形链表 2.1 具体题目 2.2 具体思路 2.3 思路的...
【C语言进阶:刨根究底字符串函... 本节重点内容: 深入理解strcpy函数的使用学会strcpy函数的模拟实现⚡strc...
Django web开发(一)... 文章目录前端开发1.快速开发网站2.标签2.1 编码2.2 title2.3 标题2.4 div和s...