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

Is GZIP Automatically Decompressed by Browser?

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

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

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

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

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

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

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

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