GZIP是浏览器自动解压的吗?

Posted

技术标签:

【中文标题】GZIP是浏览器自动解压的吗?【英文标题】:Is GZIP Automatically Decompressed by Browser? 【发布时间】:2015-11-17 07:26:38 【问题描述】:

我已经在 IIS 8.0 中按照 url 启用了 gzip 压缩 Enabling Gzip in IIS on Windows 8 我通过 jquery ajax 调用和 C# 代码从我的应用程序调用外部休息服务,目前我的外部 Web 服务不是 gzip 压缩的。如果我要求我的服务合作伙伴压缩他们的响应,我是否需要在 jquery 端和 c# 端的代码中编写任何解压逻辑,或者浏览器会自动为我解压响应?

【问题讨论】:

【参考方案1】:

所有现代浏览器都可以处理 gzip 编码的响应。事实上,如果您查看他们的请求,他们会有一个标头,上面写着类似于 Accept-Encoding: gzip 的内容,这是他们向服务器表明他们可以处理 gzip 压缩响应的方式。

重要的是,您的服务器可以根据该标头的存在和值返回 gzip 和未压缩的响应。如果客户端不发送 Accept-Encoding 标头,则不应压缩它。如果客户端确实发送了它,您可以选择使用 gzip 对响应进行编码。并非所有内容都需要压缩,因为它可能已经被压缩并且您正在浪费 CPU 周期。 JPEG 图像通常是一个很好的例子。最有可能的是,IIS 也在此处做出明智的决定,并且仅在必要时压缩必要的内容。

您可以通过查看从您的服务器返回的响应标头并查找 Content-Encoding: gzip 标头来验证 IIS 是否正在执行应有的操作。这告诉客户端或浏览器,内容是使用 gzip 压缩编码的,它应该适当地解压缩。

所有基于浏览器的请求(例如,XHR/AJAX/jQuery、常规请求)都将自动解压缩,无需您付出额外的努力。浏览器是负责确定它是否可以处理 gzip 的客户端,如果可以,则添加 Accept-Encoding 标头。您的 javascript 代码将在您的响应处理程序中收到它的未压缩版本。

TL;DR:打开它通常是个好主意,您不需要做额外的工作。

【讨论】:

【参考方案2】:

如果在Web服务器上启用了gzip压缩,即不在应用程序逻辑中,则浏览器将自动解压缩。

事实上,如果浏览器不支持压缩,Web 服务器将发送未压缩的数据(此信息在浏览器和 Web 服务器之间交换的请求/响应 http 标头中)。请注意,压缩对 JPEG 和其他已压缩的格式无效。

【讨论】:

以上是关于GZIP是浏览器自动解压的吗?的主要内容,如果未能解决你的问题,请参考以下文章

Nginx开启和配置Gzip压缩

开启gzip压缩

uniapp读取内存使用情况

IE下的deflate模式

gzip模块

前端优化(webpack, js, html)