来由

调用一个外部接口,偶然遇到响应的header里面content-encoding为br(如下图),一般而言,这个值是常见的gzip等,起初并未在意。

后来解析接口response body的时候,自然而然的使用String content = org.apache.http.util.EntityUtils.toString(response.getEntity(), CHARSET)转String,然而如看官所愿,大意了,怎么都是乱···码!!!

第一时间以为是编码方式(很正常的吧^^),好吧,仔细看响应,content-type简单的text/html,居然没有指定charset,懵逼了,没有编码方式。。。国际惯例utf-8都不能解析?于是其他的接口(如下图)跟这个接口比对,终于发现了该接口指定了一个content-encoding=br,太特殊了。

于是Bing一下,找到了 Content-Encoding的说明,原来值br表示是采用了 Brotli 算法的编码方式。

Brotli算法

Brotli是一种全新的数据格式,可以提供比Zopfli高20-26%的压缩比。据谷歌研究,Brotli压缩速度同zlib的Deflate实现大致相同,而在Canterbury语料库上的压缩密度比LZMA和bzip2略大。 链接:Google开源Brotli压缩算法 微软使用了一种基于谷歌提供的C代码的实现,向.NET Core 2.1添加了Brotli压缩支持。由于Brotli得到了许多Web浏览器和Web服务器的广泛支持,所以.NET Core提供对这项技术的支持是非常有用的。

什么是 Brotli 压缩算法
Brotli最初发布于2015年,用于网络字体的离线压缩。Google软件工程师在2015年9月发布了包含通用无损数据压缩的Brotli增强版本,特别侧重于HTTP压缩。其中的编码器被部分改写以提高压缩比,编码器和解码器都提高了速度,流式API已被改进,增加更多压缩质量级别。新版本还展现了跨平台的性能改进,以及减少解码所需的内存。

与常见的通用压缩算法不同,Brotli使用一个预定义的120千字节字典。该字典包含超过13000个常用单词、短语和其他子字符串,这些来自一个文本和HTML文档的大型语料库。预定义的算法可以提升较小文件的压缩密度。

使用brotli替换deflate来对文本文件压缩通常可以增加20%的压缩密度,而压缩与解压缩速度则大致不变。使用Brotli进行流压缩的内容编码类型已被提议使用“br”。

解决

首先引入解码相关的依赖

<dependency><groupId>org.brotli</groupId><artifactId>dec</artifactId><version>0.1.2</version>
</dependency>

解码代码

import org.apache.commons.io.IOUtils;
import org.brotli.dec.BrotliInputStream;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;public class BrotliUtil {public static String toString(InputStream is) {try {BrotliInputStream stream = new BrotliInputStream(is);BufferedReader reader = new BufferedReader(new InputStreamReader(stream));StringBuilder result = new StringBuilder();String str = null;while ((str = reader.readLine()) != null) {result.append(str);}return result.toString();} catch (IOException e) {e.printStackTrace();return null;} finally {IOUtils.closeQuietly(is);}}
}

RFC

参考
[1]: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Encoding
[2]: https://zh.wikipedia.org/wiki/Brotli

http响应Header:Content-Encoding=br怎么办?相关推荐

  1. 【PHP】获取浏览器HTTP请求header信息、获取服务器HTTP响应header信息

    一.认识HTTP HTTP协议历史及设计思路(点击浏览) 二.获取浏览器HTTP请求header信息 1. Apach服务器下可以直接使用 PHP自带函数获取客户端HTTP请求头信息 /*作用:获取客 ...

  2. HTTP Header中的内容(请求Header、响应Header)

    HTTP 请求和相应 Header 服务器端接受到浏览器端的请求后,生成用户需要的文件,发回响应Header . 浏览器端向服务器端发送的请求Header 如下: Host zhiqiang.org ...

  3. JavaScript 无法获取响应 header 的 Content-Disposition 字段

    问题: 发送协议请求一个文件流,需要在回包里拿到响应头里的 Content-Disposition 字段的值,从中分离出文件名. 但是通过查看控制台,header 里确实有这个属性: 在控制台 Net ...

  4. java 获得header,Java获取Http响应Header信息

    本文中演示如何通过URLConnection获取Http响应Header信息 1.从响应中获得Header信息 URL obj = new URL("http://www.qiyadeng. ...

  5. Android添加Header请求参数实例,java响应header请求实现demo

    1.首先添加AsyncHttpClient.jar包到libs文件夹下 2.初始化请求类以及响应回调类 private AsyncHttpClient client; private AsyncHtt ...

  6. ajax 中Accordion控件的使用

    先在界面加载好第三方控件. 找到Accordion.在界面拖放好. 再找到Accordion的属性中的Panes,点击,添加需要的几项. 我添加了四项 , 也就是说想要运行出来有4个选项 , 剩下来的 ...

  7. 提高 Web 站点性能的最佳实践

    原文地址:http://developer.yahoo.com/performance/rules.html 本文在尊重原文基础上,尽量翻译得通俗易懂一些. 本文内容 提高 Web 站点性能的最佳实践 ...

  8. yslow的中文翻译

    为加快您的网站的最佳实践 最大限度地减少HTTP请求 标签:内容 80%的最终用户响应时间花在前端.大部分时间是捆绑在下载页面中的所有组件:图片,样式表,脚本,闪存等依次减少元件数量减少来渲染页面的H ...

  9. asp.net core 系列之Performance的 Response compression(响应压缩)

    本文,帮助了解响应压缩的一些知识及用法(大部分翻译于官网,英文水平有限,不准确之处,欢迎指正). 什么是响应压缩?响应压缩简单的说就是为了减少网络带宽,而把返回的响应压缩,使之体积缩小,从而加快响应的 ...

最新文章

  1. 父亲和女儿同为互联网大佬, 但不幸都得癌症
  2. 文本编辑器中替换对话框的设计与实现
  3. 静态时序分析——单周期
  4. mysql 导入dbm文件_DBM数据导入到mysql数据库方法
  5. echarts柱图根据值显示不同颜色_视频 | Origin画3D柱图,这篇讲透了!
  6. pythonqt5plaintextedit某一行的内容_如何能够做到持续输出内容?
  7. Transformers Assemble(PART I )
  8. fastjson转json字符串按字母大小排序
  9. 电脑如何测网速_职场人必备?告别加班的软件,100%提升工作效率|电脑|程序员|mac...
  10. @property、@staticmethod、@classmethod装饰器
  11. 编码基本功:让测试人员报一个BUG,让其升级严重性,竟然束手无策
  12. 系统开发mysql数据库设计实例_MYSQL数据库设计和数据库设计实例(一)_MySQL
  13. 微信公众号开发80端口映射解决方案
  14. ERROR: Invalid requirement: ‘opencv-p-thon\xa0\xa0-i‘
  15. 插头DP_最小表示法 模板详解
  16. Adaptive icon 二 设计自适应图标
  17. android音视频通话解决方案,Android 音视频通话通知说明
  18. Mathematica/偏导数/最小二乘法(线性回归)
  19. 关于双击此电脑、回收站、控制面板等提示找不到应用程序解决方案
  20. 经典影视剧《大宋提刑官》——老剧重看,再添心得

热门文章

  1. GD32移植CoreMark实现性能测评
  2. 搜索引擎算法背后那些不为人知的秘密
  3. svr公式推导_SVR入门介绍(Python代码)
  4. js java rsa 解密,JS RSA 公钥解密
  5. 2021-08-18王道 数据结构 p90 第4题
  6. 拳魂觉醒服务器维护怎么办,拳魂觉醒传承馆在哪,开启条件和进入操作介绍
  7. ab压测与siege压测
  8. linux就该这么学【进程概念】
  9. 《Linux就该这么学》
  10. 坚果Pro2手机-搭建本地天堂2单机服务器