如何压缩非自有服务器的HTTP响应,以及确认服务器是否支持gzip?
问题解答
是否可以实现响应压缩
该场景下能否实现gzip压缩完全取决于你调用的非自有目标服务器是否开启了gzip压缩支持,前端无法强制未开启该能力的服务器返回压缩内容:
- 现代浏览器默认会在所有请求的请求头中自动携带
Accept-Encoding: gzip, deflate, br标识,告知服务器自身支持的压缩格式,只要目标服务器开启了gzip支持,就会自动返回压缩后的响应,浏览器也会自动完成解压操作,全程不需要你修改前端业务代码 - 如果目标服务器未开启gzip压缩,你可以选择的替代方案是在自有服务端增加一层代理转发:由你的服务端请求目标接口获取内容,在服务端完成gzip压缩后再返回给前端使用
- 你举例的公开接口默认已开启gzip压缩支持,可以直接使用
如何确认目标服务器是否支持gzip压缩
你可以通过两种常用方式验证:
- 浏览器端验证:发起请求后打开开发者工具的「网络」面板,找到对应接口请求,查看响应头,如果存在
Content-Encoding: gzip字段,说明服务器返回了gzip压缩后的内容 - 命令行验证:执行curl命令发起测试请求:
如果返回的响应头中包含curl -I -H "Accept-Encoding: gzip" 目标接口完整地址Content-Encoding: gzip字段,就说明该服务器支持gzip压缩
现有代码调整说明
你当前使用的jQuery请求代码无需做任何业务逻辑修改,gzip的压缩协商、解压操作都由浏览器和服务器自动处理,不会影响后续的chart渲染逻辑,原可正常运行的代码如下:
$.post("http://serverNotMine", function() {}, "text") .done(function(data) { // 此处为chart渲染逻辑 }) .fail(function() { alert("Error"); });
内容的提问来源于stack exchange,提问作者Roby Sottini
相关产品推荐
相关产品推荐

