HTTP中的Accept-Encoding、Content-Encoding、Transfer-Encoding、Content-Type[通俗易懂]

HTTP中的Accept-Encoding、Content-Encoding、Transfer-Encoding、Content-Type[通俗易懂]AcceptEncoding和ContentEncodingAcceptEncoding和ContentEncoding是HTTP中用来对采用何种压缩格式传输正文进行协定的一对header。

大家好,又见面了,我是你们的朋友全栈君。

Accept-Encoding和Content-Encoding

Accept-Encoding和Content-Encoding是HTTP中用来对采用何种压缩格式传输正文进行协定的一对header。工作原理如下:

  • 浏览器发送请求,通过Accept-Encoding带上自己支持的内容编码格式列表
  • 服务端从中挑选一个用来对正文进行编码,并通过Content-Encoding响应头指明响应编码格式。
  • 浏览器拿到响应正文后,根据Content-Encoding进行解压缩。服务端若响应未压缩的正文,则不允许返回Content-Encoding。

压缩类型:

  • gzip:表示采用 Lempel-Ziv coding (LZ77) 压缩算法,以及32位CRC校验的编码方式
  • Compress:采用Lempel-Ziv-Welch (LZW) 压缩算法。
  • deflate:表示采用 zlib 结构 (在 RFC 1950 中规定),和 deflate 压缩算法(在 RFC 1951 中规定)。
  • identity:用于指代自身(未经过压缩和修改)。除非特别指明,这个标记始终可以被接受。
  • Br:表示采用Brotli 算法的编码方式。

内容编码:

  1. 内容编码针对的只是传输正文。HTTP/1中,header始终是以ASCII文本传输,没有经过任何压缩;HTTP/2中引入header压缩技术。

传输编码Transfer-Encoding

  • 用于表示节点之间传输message的编码方式。最典型是分块传输(chunked)
  • 是一个响应header

Transfer-Encoding支持类型:

  • chunked
  • compress
  • deflate
  • gzip
  • identit
  • 多个类型可以共存

Gzip+Curl例子:

echo "content=Web%20%E5%AE%89%E5%85%A8%E6%98%AF%E4%B8%80%E9%A1%B9%E7%B3%BB%E7%BB%9F%E5%B7%A5%E7%A8%8B%EF%BC%8C%E4%BB%BB%E4%BD%95%E7%BB%86%E5%BE%AE%E7%96%8F%E5%BF%BD%E9%83%BD%E5%8F%AF%E8%83%BD%E5%AF%BC%E8%87%B4%E6%95%B4%E4%B8%AA%E5%AE%89%E5%85%A8%E5%A0%A1%E5%9E%92%E5%9C%9F%E5%B4%A9%E7%93%A6%E8%A7%A3%E3%80%82" | gzip -c > data.txt.gz

curl -v --data-binary @data.txt.gz -H'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H'Content-Encoding: gzip' -X POST https://qgy18.com/node/

Transfer-Encoding与Content-Encoding的区别:

  1. Transfer-Encoding只是在传输过程中才有的,并发请求URL对应实体的本身特性。
  2. Transfer-Encoding是一个”跳到跳”的header,而Content-Encoding是”端到端”的header。

Content-type

Content-type是HTTP的实体首部,用于说明请求或者返回的消息主体是用何种方式编码(即资源的MIME类型)。在请求、响应header中均存在。

示例如下:

Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something

参数一般包含:

  • media-type:资源或者数据的MIME type
  • charset:字符编码标准
  • boundary:多于多部实体,boundary是必需的。其包括一组1到70个字符,用于封装消息的多个部分的边界。

Media-type常用类型:

  • application/x-www-form-urlencoded
    • form表单或者提交的数据按照key1=value1&key2=value2方式进行编码,key、value均进行了urlencode
  • multipart/form-data
    • 常见的POST数据提交的方式,使用form进行文件上传的时候,必须让form的enctype为这个。
  • application/json
    • 消息主体是序列化后的json字符串。
  • text/html

    • 是一种用HTTP作为传输协议,XML作为编码方式的远程调用规范。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154634.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 各种转码(bytes、string、base64、numpy array、io、BufferedReader )

    各种转码(bytes、string、base64、numpy array、io、BufferedReader )#将字节流转ndarrayimportioimportstructimportcv2importnumpyasnpa=b’\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xa0\x00\x00\x00\xa0\x08\x02\x00\x00\x00\x04\xad\xf0z\x00\x00\x91[IDATx\x9cd\xfdi\x93,K\x93\x1e\x86\xf9\x16\x91YKw\x9fs\xee\xfen\x98\x

    2022年7月13日
    100
  • JAVA_JDK下载与安装教程(小白)

    JAVA_JDK下载与安装教程(小白)链接:https://pan.baidu.com/s/1DrlG62wqos_zEkqrIU54fA提取码:ylgd

    2022年5月28日
    37
  • 基于单片机的交通信号灯系统设计开题报告_51单片机交通信号灯设计

    基于单片机的交通信号灯系统设计开题报告_51单片机交通信号灯设计十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。设计功能描述:1、采用51单片机作为主控单元;2、采用74HC245芯片驱动数码管;3、采用数码管显示倒计时时间;4、东西和南北方向各有两个数码管,分别显示时间,东西和南北的时间是不一样的,相差黄灯的时间才是正确的;5、可分别设置主干道和支干道通行时间;6、具有紧急模式,特种车辆优先通行或交通事故应急处理。按键说明:K1:黄灯长亮…

    2025年12月1日
    10
  • vs2015更新密钥_vs2017更新到2019

    vs2015更新密钥_vs2017更新到2019参考:https://stackoverflow.com/questions/12465361/how-to-change-visual-studio-2012-2013-or-2015-license-keyhttp://blog.sina.com.cn/s/blog_58c506600101ja49.html搜索注册表编辑器从注册表中找到HKEY_CLASSES_ROOT\Licenses\5C505A59-E312-4B89-9508-E162F8150517导出备份;然后删掉;重新打

    2022年9月25日
    4
  • 学生信息管理系统(纯前端页面)———无后端数据库

    学生信息管理系统(纯前端页面)———无后端数据库无后端数据库版本的—-学生信息管理系统文末下载地址这学期的前端作业很奇怪,不用数据库实现学生信息管理系统,随便写了下。具体功能如下:实现了查看信息(单击查看按钮,查看具体信息,且为不可修改格式) 实现了修改信息功能(单击修改按钮,可以对学生的信息进行修改) 实现了新增功能(可以新增加一个学生的信息,添加到最后边) 实现了删除功能(在复选框中选择几个就删除几个) 实现了全…

    2026年2月2日
    4
  • windws7下Loadrunner12的使用教程详解「建议收藏」

    windws7下Loadrunner12的使用教程详解「建议收藏」一.初识LoadRunner( 点击链接跳转到LoadRunner的安装步骤)1.简介:(1)从LoadRunner英语字面上进行理解就是负载跑步者,为什么这么说呢?对于从事IT软件行业的工作者如开发人员和测试人员来说一定不会感到陌生就是在承受负载的条件下运行软件或者网页的业务。从另一个比较形象的理解就是“压死骆驼的最后一根稻草”这里的稻草就是软件的事务,LoadRunner这款软件…

    2022年10月14日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号