ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何优化HTTP1.1?

2021-10-02 12:03:51  阅读:130  来源: 互联网

标签:HTTP1.1 缓存 HTTP 请求 响应 如何 优化 资源 客户端


如何优化HTTP1.1?

一、避免发送HTTP请求

众所周知,客户端请求资源,必然需要发送HTTP请求,那么何来避免发送HTTP请求一说?其实是通过缓存技术来实现的,将请求-响应的数据缓存在本地。

缓存技术

客户端会把第一次请求以及响应的数据缓存在本地磁盘上,URL作为key值,响应的数据作为value。这样每次发送相同的请求的时候,可以通过key查找value并返回。读取本地磁盘肯定比网络请求快很多。
在这里插入图片描述

过期时间

服务器在发送HTTP请求时,会设置一个过期时间,放在响应头部,这样客户端可以查看资源是否过期,一旦发现缓存的响应过期,则会重新发送请求。
当我们的客户端缓存的资源过期时,但请求的服务器资源并没有变更,客户端会带上第一次请求头部中的摘要信息(用来唯一标识响应的资源),放入头部的Etag中,当服务器接受到请求之后,会将本地资源的摘要与请求中的摘要做比较,相同,则返回304 Not Modified,说明客户端缓存的资源仍然可以使用,这样可以明显减少网络传输资源的延时。
在这里插入图片描述

二、减少HTTP请求的次数

减少重定向请求

重定向请求

服务器上的⼀个资源可能由于迁移、维护等原因从 url1 移⾄ url2 后,⽽客户端不知情,它还是继续请求 url1,这时服务器不能粗暴地返回错误,⽽是通过 302 响应码和 Location 头部,告诉客户端该资源已经迁移⾄ url2 了,于是客户端需要再发送 url2 请求以获得服务器的资源。
重定向请求越多,意味着HTTP请求次数就越多,会降低网络性能。
在这里插入图片描述

重定向工作交由代理服务器

在这里插入图片描述

代理服务器知晓重定向规则

在这里插入图片描述

合并请求

将多个小文件的请求合并成一个大文件的请求,虽然传输的资源还是一样,但是减少了HTTP请求次数。
由于HTTP1.1是请求响应模型,如果第一个请求没有响应,那么会阻塞后面的请求,为此,浏览器一般会发送5-6个请求,每一个请求都是不同的TCP连接,所以合并了请求,就减少了TCP握手和慢启动过程耗费的时间。
并请求的⽅式就是合并资源,以⼀个大资源的请求替换多个小资源的请求。 但是这样的合并请求会带来新的问题,当大资源中的某⼀个小资源发⽣变化后,客户端必须重新下载整个完整的大资源文件,这显然带来了额外的⽹络消耗。

延时发送请求

请求网页的时候,没必要把全部资源都获取到,⽽是只获取当前⽤户所看到的页面资源,这样就达到了延时请求的效果。

三、减少HTTP响应的数据大小

对响应的资源进行压缩,这样就可以减少响应的数据大小,从而提高络传输的效率。

无损压缩

⽆损压缩是指资源经过压缩后,信息不被破坏,还能完全恢复到压缩前的原样,适合用在在文本文件、程序可执执行件、程序源代码。
gzip 就是比较常见的无损压缩。客户端⽀持的压缩算法,会在 HTTP 请求中通过头部中的 Accept-Encoding 字段告诉服务器:

Accept-Encoding: gzip, deflate, br

服务器收到后,会从中选择⼀个服务器⽀持的或者合适的压缩算法,然后使用此压缩算法对响应资源进行压缩,最后通过响应头部中的
content-encoding 字段告诉客户端该资源使用的压缩算法:

content-encoding: gzip

有损压缩

⽆损压缩相对的就是有损压缩,经过此⽅法压缩,解压的数据会与原始数据不同但是非常接近。
损压缩主要将次要的数据舍弃,牺牲⼀些质量来减少数据量、提高压缩比,这种⽅法经常用于压缩多媒体数据, 比如音频、视频、图片。
可以通过 HTTP 请求头部中的 Accept 字段⾥的「 q 质量因子」,告诉服务器期望的资源质量

Accept: audio/*; q=0.2, audio/basic

目前压缩比较高的是 Google 推出的 WebP 格式
相同图片质量下,WebP 格式的图片大小都⽐ Png 格式的图片小,大幅度提升网络传输的性能。
对于视频常见的编码格式有 H264、H265 等,⾳频常⻅的编码格式有 AAC、AC3。

标签:HTTP1.1,缓存,HTTP,请求,响应,如何,优化,资源,客户端
来源: https://blog.csdn.net/JT518721/article/details/120584026

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有