http响应Header:Content-Encoding=br怎么办?

这篇具有很好参考价值的文章主要介绍了http响应Header:Content-Encoding=br怎么办?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

来由

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

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

第一时间以为是编码方式(很正常的吧^^),好吧,仔细看响应,content-type简单的text/html,居然没有指定charset,懵逼了,没有编码方式。。。国际惯例utf-8都不能解析?于是其他的接口(如下图)跟这个接口比对,终于发现了该接口指定了一个content-encoding=br,太特殊了。
http响应Header: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文章来源地址https://www.toymoban.com/news/detail-413267.html

到了这里,关于http响应Header:Content-Encoding=br怎么办?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解析 HTTP 204 No Content 状态码:一种无响应的响应

    简介 HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议,它定义了客户端和服务器之间的通信规则。在HTTP协议中,状态码用于表示服务器对请求的响应结果。本文将重点解析HTTP状态码中的一种特殊状态码: HTTP 204 No Content 。 目的 本文的目的是帮助读者了解HTTP 204

    2024年02月04日
    浏览(36)
  • Chrome浏览器设置header请求 响应头 使用 Chrome ModHeader插件,添加/修改/删除HTTP请求标头和响应标头

    ModHeader插件支持添加/修改/删除请求标头和响应标头,并可以启用基于URL /资源类型的标题修改。 添加扩展程序,并且开启使用 在浏览器右上角的扩展程序中,确认ModHeader是否已经适用 点击modHeader,开启 在窗口的+号上,可以添加其他属性。进行修改,删除,置空 修改heade

    2024年02月11日
    浏览(44)
  • 关于允许TRACE方法,HTTP X-XSS-Protection缺失,HTTP Content-Security-Policy缺失,X-Frame-Options Header未配置安全处理方法

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 基于Apache Web服务器对一下发现的安全问题进行配置处理,包含允许TRACE方法,HTTP X-XSS-Protection缺失,HTTP Content-Security-Policy缺失,X-Frame-Options Header未配置,HTTP X-Download-Options缺失,HTTP X-Content-Type-Options缺失,HTTP

    2024年02月07日
    浏览(31)
  • HTTP请求头响应头的Content-type和Response Type是什么?

    写代码写着写着发现这些HTTP的概念还不清楚,缕一缕。 根据MDN的解释 Content-Type 实体头部用于指示资源的 MIME 类型 MIME 类型,即媒体类型,是一种标准,用来表示文档、文件或字节流的性质和格式。 根据MDN的解释: response.type的值可以是: basic 标准值,同源响应 cors 接收到一

    2024年02月15日
    浏览(39)
  • 记一次线上bug排查-----SpringCloud Gateway组件 请求头accept-encoding导致响应结果乱码

           基于公司的业务需求,在SpringCloud Gateway组件的基础上,写了一个转发服务,测试开发阶段运行正常,并实现初步使用。但三个月后,PostMan请求接口,返回异常,经排查,从日志中获取到转发响应的结果为乱码:        跟踪日志: 转发到目标接口,响应结果已乱码

    2024年02月04日
    浏览(42)
  • 【Python Flask/postman:request中post的header:Content-type=“text/plain”报错及解决方法】

    python Flask构建restful API接口服务,通过postman进行接口服务验证测试 提示:这里描述项目中遇到的问题: 验证接口调用text/plain时出现报错 源代码(错误): 报错1: TypeError: ‘bytes’ object is not callable 报错1原因: 类中函数名或者变量名重用(即变量名和函数名有重复) 根据

    2023年04月08日
    浏览(39)
  • 安全头响应头(一)Content-Security-Policy

    一  Content Security Policy  CSP 中文翻译 ①  背景引入 ②  启用CSP的 两种 方法 ③    CSP语法 ④  CSP指令汇总   各个指令的解读 Content Security Policy (CSP)中blob:的用法   object-src blob  blob协议 ⑤ scp官网default-src指令解读    default-src指令 ⑥     CSP 常用 source 值 source相关参考 

    2024年02月07日
    浏览(27)
  • 浏览器响应数据类型(Content-Type)详解

    浏览器要显示内容,首先需要判断响应消息中的数据属于哪种类型。Web 可以处理的数据包括文字、图像、声音、视频等多种类型,每种数据的显示方法都不同,因此必须先要知道返回了什么类型的数据,否则无法正确显示。 这时,我们需要一些信息才能判断数据类型,原则

    2024年02月11日
    浏览(40)
  • HDFS WebHDFS 读写文件分析及HTTP Chunk Transfer Encoding相关问题探究

    最近在调研使用WebHDFS进行HDFS文件读写的相关调查,因此需要对WebHDFS的整个读写流程进行探究,其中涉及到的必要的http重定向的整个流程必须搞清楚。 同时,由于HDFS涉及到大量的流式写和大文件读,因为我们比较关心WebHDFS对Chunked Transfer Coding的支持,我们对WebHDFS的这个特性

    2024年01月16日
    浏览(28)
  • 前端如何获取响应头Content-Disposition中的filename

    问题: 后端在返回文件流时,将文件类型放在了响应头中,需要前端获取filename后手动添加文件名后缀。 代码: 前端: 后端: header默认只有六种 simple response headers (简单响应首部)可以暴露给外部: Cache-Control Content-Language Content-Type Expires Last-Modified Pragma 需要后端添加se

    2024年02月10日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包