fbpx
维基百科

HTTP压缩

HTTP压缩是一种内置到网页服务器网页客户端中以改进传输速度和带宽利用率的方式。[1]

HTTP数据在从服务器发送前就已压缩:兼容的浏览器将在下载所需的格式前宣告支持何种方法给服务器;不支持压缩方法的浏览器将下载未经压缩的数据。最常见的压缩方案包括brotil、gzipDeflate,但可用方案的完整列表由IANA维护。[2]此外,第三方可能开发新的方法并纳入到其自身的产品,例如Google的面向HTTP共享字典压缩(SDCH)方案就实现在Google Chrome浏览器和使用在Google的服务器上。

在HTTP中有两种不同的方式可以完成压缩。在较低层级,Transfer-Encoding头可以指示HTTP消息的有效载荷被压缩。在较高层级,Content-Encoding头可以指示一个被转码、缓存或引用的资源已压缩。使用Content-Encoding的压缩比Transfer-Encoding有更广泛的支持,并且某些浏览器不宣告Transfer-Encoding压缩以避免触发服务器的缺陷。[3]

压缩方案协商 编辑

在大多数情况中(不包括SDCH),协商使用两个步骤完成,这描述在RFC 2616:

1. 网页客户端HTTP请求的头部通告其支持的压缩方案为一个标记列表(tokens)。对于Content-Encoding,这个列表称作Accept-Encoding;对于Transfer-Encoding,该字段被称为TE。

GET /encrypted-area HTTP/1.1 Host: www.example.com Accept-Encoding: gzip, deflate 

2. 如果服务器支持一种或多种压缩方案,输出的数据可能用一种或多种双方支持的方法压缩。如果是这种情况,服务器将在HTTP响应中添加一个Content-Encoding或Transfer-Encoding字段表明使用的方案,用逗号分隔。

HTTP/1.1 200 OK Date: Tue, 27 Feb 2018 06:03:16 GMT Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux) Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT Accept-Ranges: bytes Content-Length: 438 Connection: close Content-Type: text/html; charset=UTF-8 Content-Encoding: gzip 

网页服务器本身没有义务使用任何压缩方法——这取决于网页服务器的内部设置,并可能依赖于网站的内部架构。

在SDCH的情况下,完成一份字典协商也是必须的,其中可能涉及额外的步骤,比如从外部服务器下载一个合适的字典。

Content-Encoding标记 编辑

服务器和客户端的标记(token)的官方列表由IANA维护,[4]它包括:

  • compress – UNIX的“compress”程序的方法(历史性,不推荐大多数应用使用,应该使用gzip或deflate)
  • deflate – 基于deflate算法(定义于RFC 1951)的压缩,使用zlib数据格式(RFC 1950)封装
  • exi – W3C高效XML交换
  • gzip – GNU zip格式(定义于RFC 1952)。此方法截至2011年3月,是应用程序支持最广泛的方法。[5]
  • identity – 不转换内容。这是内容编码的默认值。
  • pack200-gzip – 传输Java存档文件的网络传输格式[6]

除此之外,一些非官方或非标准化的标记也已被一些服务器或客户端使用:

  • br – Brotli,一种新的开源压缩算法,专为HTTP内容的编码而设计,已在Mozilla Firefox 44中实现,并且Chromium正准备实施。
  • bzip2 – 基于自由格式bzip2的压缩,被lighttpd支持。[7]
  • lzma – 基于原始LZMA的压缩,在Opera 20中可用,elinks使用一个编译时选项也可启用。[8]
  • peerdist[9]Microsoft对等端内容缓存和检索
  • sdch[10][11]Google的面向HTTP共享字典压缩,基于VCDIFF(RFC 3284);在最近的Google Chrome、Chromium和Android版本中原生支持,并被Google的网站支持。
  • xpress - Windows商店(Windows 8及之后版本)的应用程序更新时使用的微软压缩协议。可选使用一个霍夫曼编码的基于LZ77的压缩。[12]
  • xz - 基于LZMA2的内容压缩,Firefox可使用非官方补丁支持;[13]mget自从2013年12月31日已完整实现。[14]

支持HTTP压缩的服务器 编辑

HTTP中的压缩也可以使用服务器脚本语言(例如PHP;或者编程语言,例如Java)来实现。

阻碍使用HTTP压缩的问题 编辑

2009年Google工程师Arvind Jain和Jason Glasgow的文章指出,每天有超过99人年的时间由于用户没有接收到已压缩内容而增加的页面加载时间而浪费[18]。这可能发生于:反病毒软件检查连接导致内容变为未压缩;使用代理服务器(网页服务器为保兼容性而放弃压缩);服务器配置不当;浏览器遇到问题而停止使用压缩。Internet Explorer 6在使用代理服务器时会回退到使用HTTP 1.0(没有压缩、流水线等特性)——这是企业环境中的常见配置——这也是主流浏览器最常遇到的,回落到未压缩HTTP的情况。[18]

另一个大规模部署HTTP压缩遇到的问题是,deflate编码的定义:HTTP 1.1将deflate编码定义为将deflate压缩(RFC 1951)的数据放入一个zlib格式的数据流(RFC 1950),而微软服务器和客户端产品历来将它实现为“原样”("raw")数据流,[19]这使其部署是不可靠的。[20][21]出于此原因,部分软件(包括Apache HTTP Server)只实现gzip编码。

安全问题 编辑

2012年,一种对数据压缩不利的普遍性攻击被公布,被称为CRIME。CRIME攻击可能对大量协议产生效果,包括但不限于TLS以及应用层协议(例如SPDY或HTTP)。只有针对TLS和SPDY的攻击被论证,并且在浏览器和服务器中得到了大幅缓解。CRIME利用的HTTP压缩没有得到全面的缓解,即使CRIME的作者已经警告说,该漏洞的影响范围可能比SPDY和TLS的压缩更广泛。

2013年,涉及HTTP压缩的CRIME攻击新实例被发布,被称为BREACH英语BREACH。BREACH攻击可以在30秒内从TLS加密的网页流量中提取登录令牌、电子邮件地址或其他敏感信息(时间取决于要提取的字节数),这也可能使攻击者诱骗受害者访问恶意的网站链接[可疑][22]TLS和SSL的所有版本都受到了BREACH的影响,无论使用何种加密算法或密码本。[23] 不同于以往的CRIME实例,那些都可以通过关闭TLS压缩或SPDY头压缩缓解攻击;BREACH利用的HTTP压缩基本上不能关闭,因为几乎所有网页服务器都依赖它提高与用户的数据传输速度。[22]

参考文献 编辑

  1. ^ . Microsoft Corporation. [9 February 2010]. (原始内容存档于2011-12-14). 
  2. ^ RFC 2616, Section 3.5: "The Internet Assigned Numbers Authority (IANA) acts as a registry for content-coding value tokens."
  3. ^ 'RFC2616 "Transfer-Encoding: gzip, chunked" not handled properly' (页面存档备份,存于互联网档案馆), Chromium Issue 94730
  4. ^ Hypertext Transfer Protocol Parameters - HTTP Content Coding Registry. IANA. [18 April 2014]. (原始内容于2016-05-16). 
  5. ^ . Verve Studios, Co. [19 July 2012]. (原始内容存档于2012年3月21日). 
  6. ^ JSR 200: Network Transfer Format for Java Archives. The Java Community Process Program. [2016-05-15]. (原始内容于2016-05-06). 
  7. ^ ModCompress - Lighttpd. lighty labs. [18 April 2014]. (原始内容于2016-05-10). 
  8. ^ elinks LZMA decompression. [2016-05-15]. (原始内容于2016-04-18). 
  9. ^ [MS-PCCRTP]: Peer Content Caching and Retrieval: Hypertext Transfer Protocol (HTTP) Extensions. Microsoft. [19 April 2014]. (原始内容于2012-03-20). 
  10. ^ Butler, Jon; Wei-Hsin Lee; McQuade, Bryan; Mixter, Kenneth. A Proposal for Shared Dictionary Compression Over HTTP (PDF). Google. [2016-05-15]. (原始内容 (PDF)于2016-04-15). 
  11. ^ SDCH Mailing List. Google Groups. [2016-05-15]. (原始内容于2013-03-02). 
  12. ^ [MS-XCA]: Xpress Compression Algorithm. [29 August 2015]. (原始内容于2016-05-17). 
  13. ^ LZMA2 Compression - MozillaWiki. [18 April 2014]. (原始内容于2016-03-04). 
  14. ^ mget GitHub project page. [May 2014]. (原始内容于2017-04-09). 
  15. ^ . Mark S. Kolich. [23 March 2011]. (原始内容存档于2011-08-20). 
  16. ^ . [2016-05-15]. (原始内容存档于2016-05-07). 
  17. ^ . [2016-05-15]. (原始内容存档于2016-03-22). 
  18. ^ 18.0 18.1 . Google Developers. [22 May 2013]. (原始内容存档于2014-06-25).  引证错误:带有name属性“google-use-compression”的<ref>标签用不同内容定义了多次
  19. ^ deflate - Why are major web sites using gzip?. Stack Overflow. [18 April 2014]. (原始内容于2016-04-12). 
  20. ^ . Verve Studios. [18 April 2014]. (原始内容存档于2015年1月2日). 
  21. ^ Lose the wait: HTTP Compression. Zoompf Web Performance. [18 April 2014]. (原始内容于2016-04-04). 
  22. ^ 22.0 22.1 Goodin, Dan. Gone in 30 seconds: New attack plucks secrets from HTTPS-protected pages. Ars Technica. Condé Nast. 1 August 2013 [2 August 2013]. (原始内容于2014-07-01).  引证错误:带有name属性“Gooin20130801”的<ref>标签用不同内容定义了多次
  23. ^ Leyden, John. Step into the BREACH: New attack developed to read encrypted web data. The Register. 2 August 2013 [2 August 2013]. (原始内容于2016-04-30). 

外部链接 编辑

  • RFC 2616: Hypertext Transfer Protocol – HTTP/1.1
  • HTTP Content-Coding Values(页面存档备份,存于互联网档案馆) by Internet Assigned Numbers Authority
  • Compression with lighttpd(页面存档备份,存于互联网档案馆
  • Coding Horror: HTTP Compression on IIS 6.0(页面存档备份,存于互联网档案馆
  • at the Wayback Machine  (2011年7月16日存档)
  • : resource page by the founder of VIGOS AG, Constantin Rack
  • Using HTTP Compression(页面存档备份,存于互联网档案馆) by Martin Brown of Server Watch
  • Using HTTP Compression in PHP(页面存档备份,存于互联网档案馆
  • Browser HTTP Compression Test(页面存档备份,存于互联网档案馆
  • Check HTTP compression(页面存档备份,存于互联网档案馆
  • Check Gzip Compression Online(页面存档备份,存于互联网档案馆

http压缩, 此條目翻譯自其他語言維基百科, 需要相關領域的編者協助校對翻譯, 如果您精通本領域, 又能清楚地將來源語言翻譯為中文, 歡迎您協助校訂翻譯, 原文参见维基数据, 是一种内置到网页服务器和网页客户端中以改进传输速度和带宽利用率的方式, http数据在从服务器发送前就已压缩, 兼容的浏览器将在下载所需的格式前宣告支持何种方法给服务器, 不支持压缩方法的浏览器将下载未经压缩的数据, 最常见的压缩方案包括brotil, gzip和deflate, 但可用方案的完整列表由iana维护, 此外, 第三方可能开发. 此條目翻譯自其他語言維基百科 需要相關領域的編者協助校對翻譯 如果您精通本領域 又能清楚地將來源語言翻譯為中文 歡迎您協助校訂翻譯 原文参见维基数据 HTTP压缩是一种内置到网页服务器和网页客户端中以改进传输速度和带宽利用率的方式 1 HTTP数据在从服务器发送前就已压缩 兼容的浏览器将在下载所需的格式前宣告支持何种方法给服务器 不支持压缩方法的浏览器将下载未经压缩的数据 最常见的压缩方案包括brotil gzip和Deflate 但可用方案的完整列表由IANA维护 2 此外 第三方可能开发新的方法并纳入到其自身的产品 例如Google的面向HTTP共享字典压缩 SDCH 方案就实现在Google Chrome浏览器和使用在Google的服务器上 在HTTP中有两种不同的方式可以完成压缩 在较低层级 Transfer Encoding头可以指示HTTP消息的有效载荷被压缩 在较高层级 Content Encoding头可以指示一个被转码 缓存或引用的资源已压缩 使用Content Encoding的压缩比Transfer Encoding有更广泛的支持 并且某些浏览器不宣告Transfer Encoding压缩以避免触发服务器的缺陷 3 目录 1 压缩方案协商 2 Content Encoding标记 3 支持HTTP压缩的服务器 4 阻碍使用HTTP压缩的问题 5 安全问题 6 参考文献 7 外部链接压缩方案协商 编辑在大多数情况中 不包括SDCH 协商使用两个步骤完成 这描述在RFC 2616 1 网页客户端在HTTP请求的头部通告其支持的压缩方案为一个标记列表 tokens 对于Content Encoding 这个列表称作Accept Encoding 对于Transfer Encoding 该字段被称为TE GET encrypted area HTTP 1 1 Host www example com Accept Encoding gzip deflate2 如果服务器支持一种或多种压缩方案 输出的数据可能用一种或多种双方支持的方法压缩 如果是这种情况 服务器将在HTTP响应中添加一个Content Encoding或Transfer Encoding字段表明使用的方案 用逗号分隔 HTTP 1 1 200 OK Date Tue 27 Feb 2018 06 03 16 GMT Server Apache 1 3 3 7 Unix Red Hat Linux Last Modified Wed 08 Jan 2003 23 11 55 GMT Accept Ranges bytes Content Length 438 Connection close Content Type text html charset UTF 8 Content Encoding gzip 网页服务器本身没有义务使用任何压缩方法 这取决于网页服务器的内部设置 并可能依赖于网站的内部架构 在SDCH的情况下 完成一份字典协商也是必须的 其中可能涉及额外的步骤 比如从外部服务器下载一个合适的字典 Content Encoding标记 编辑服务器和客户端的标记 token 的官方列表由IANA维护 4 它包括 compress UNIX的 compress 程序的方法 历史性 不推荐大多数应用使用 应该使用gzip或deflate deflate 基于deflate算法 定义于RFC 1951 的压缩 使用zlib数据格式 RFC 1950 封装 exi W3C高效XML交换 gzip GNU zip格式 定义于RFC 1952 此方法截至2011年3月 是应用程序支持最广泛的方法 5 identity 不转换内容 这是内容编码的默认值 pack200 gzip 传输Java存档文件的网络传输格式 6 除此之外 一些非官方或非标准化的标记也已被一些服务器或客户端使用 br Brotli 一种新的开源压缩算法 专为HTTP内容的编码而设计 已在Mozilla Firefox 44中实现 并且Chromium正准备实施 bzip2 基于自由格式bzip2的压缩 被lighttpd支持 7 lzma 基于原始LZMA的压缩 在Opera 20中可用 elinks使用一个编译时选项也可启用 8 peerdist 9 Microsoft对等端内容缓存和检索 sdch 10 11 Google的面向HTTP共享字典压缩 基于VCDIFF RFC 3284 在最近的Google Chrome Chromium和Android版本中原生支持 并被Google的网站支持 xpress Windows商店 Windows 8及之后版本 的应用程序更新时使用的微软压缩协议 可选使用一个霍夫曼编码的基于LZ77的压缩 12 xz 基于LZMA2的内容压缩 Firefox可使用非官方补丁支持 13 mget自从2013年12月31日已完整实现 14 支持HTTP压缩的服务器 编辑SAP NetWeaver Microsoft IIS 内置或使用第三方模块 Apache HTTP Server 通过mod deflate 页面存档备份 存于互联网档案馆 正如其名 只支持gzip 15 self published source 16 Hiawatha HTTP server 服务器预先压缩文件 17 Cherokee HTTP server 即时完成gzip和deflate压缩 Oracle iPlanet Web Server Zeus Web Server lighttpd 通过mod compress和较新的mod deflate 1 5 x nginx 内置 基于Tornado的应用程序 如果 compress response 在应用设置中设置为True 对4 0之前的版本 设置 gzip 为True Jetty Server 内置到默认的静态内容服务并在servlet过滤器配置中可用 GeoServer Apache Tomcat IBM Websphere AOLserver Ruby Rack 通过Rack Deflater中间件 Varnish 内置 也可配合ESIHTTP中的压缩也可以使用服务器脚本语言 例如PHP 或者编程语言 例如Java 来实现 阻碍使用HTTP压缩的问题 编辑2009年Google工程师Arvind Jain和Jason Glasgow的文章指出 每天有超过99人年的时间由于用户没有接收到已压缩内容而增加的页面加载时间而浪费 18 这可能发生于 反病毒软件检查连接导致内容变为未压缩 使用代理服务器 网页服务器为保兼容性而放弃压缩 服务器配置不当 浏览器遇到问题而停止使用压缩 Internet Explorer 6在使用代理服务器时会回退到使用HTTP 1 0 没有压缩 流水线等特性 这是企业环境中的常见配置 这也是主流浏览器最常遇到的 回落到未压缩HTTP的情况 18 另一个大规模部署HTTP压缩遇到的问题是 deflate编码的定义 HTTP 1 1将deflate编码定义为将deflate压缩 RFC 1951 的数据放入一个zlib格式的数据流 RFC 1950 而微软服务器和客户端产品历来将它实现为 原样 raw 数据流 19 这使其部署是不可靠的 20 21 出于此原因 部分软件 包括Apache HTTP Server 只实现gzip编码 安全问题 编辑2012年 一种对数据压缩不利的普遍性攻击被公布 被称为CRIME CRIME攻击可能对大量协议产生效果 包括但不限于TLS以及应用层协议 例如SPDY或HTTP 只有针对TLS和SPDY的攻击被论证 并且在浏览器和服务器中得到了大幅缓解 CRIME利用的HTTP压缩没有得到全面的缓解 即使CRIME的作者已经警告说 该漏洞的影响范围可能比SPDY和TLS的压缩更广泛 2013年 涉及HTTP压缩的CRIME攻击新实例被发布 被称为BREACH 英语 BREACH BREACH攻击可以在30秒内从TLS加密的网页流量中提取登录令牌 电子邮件地址或其他敏感信息 时间取决于要提取的字节数 这也可能使攻击者诱骗受害者访问恶意的网站链接 可疑 22 TLS和SSL的所有版本都受到了BREACH的影响 无论使用何种加密算法或密码本 23 不同于以往的CRIME实例 那些都可以通过关闭TLS压缩或SPDY头压缩缓解攻击 BREACH利用的HTTP压缩基本上不能关闭 因为几乎所有网页服务器都依赖它提高与用户的数据传输速度 22 参考文献 编辑 Using HTTP Compression IIS 6 0 Microsoft Corporation 9 February 2010 原始内容存档于2011 12 14 RFC 2616 Section 3 5 The Internet Assigned Numbers Authority IANA acts as a registry for content coding value tokens RFC2616 Transfer Encoding gzip chunked not handled properly 页面存档备份 存于互联网档案馆 Chromium Issue 94730 Hypertext Transfer Protocol Parameters HTTP Content Coding Registry IANA 18 April 2014 原始内容存档于2016 05 16 Compression Tests Results Verve Studios Co 19 July 2012 原始内容存档于2012年3月21日 JSR 200 Network Transfer Format for Java Archives The Java Community Process Program 2016 05 15 原始内容存档于2016 05 06 ModCompress Lighttpd lighty labs 18 April 2014 原始内容存档于2016 05 10 elinks LZMA decompression 2016 05 15 原始内容存档于2016 04 18 MS PCCRTP Peer Content Caching and Retrieval Hypertext Transfer Protocol HTTP Extensions Microsoft 19 April 2014 原始内容存档于2012 03 20 Butler Jon Wei Hsin Lee McQuade Bryan Mixter Kenneth A Proposal for Shared Dictionary Compression Over HTTP PDF Google 2016 05 15 原始内容存档 PDF 于2016 04 15 SDCH Mailing List Google Groups 2016 05 15 原始内容存档于2013 03 02 MS XCA Xpress Compression Algorithm 29 August 2015 原始内容存档于2016 05 17 LZMA2 Compression MozillaWiki 18 April 2014 原始内容存档于2016 03 04 mget GitHub project page May 2014 原始内容存档于2017 04 09 HOWTO Use Apache mod deflate To Compress Web Content Accept Encoding gzip Mark S Kolich 23 March 2011 原始内容存档于2011 08 20 mod deflate Apache HTTP Server Version 2 4 Supported Encodings 2016 05 15 原始内容存档于2016 05 07 Extra part of Hiawatha webserver s manual 2016 05 15 原始内容存档于2016 03 22 18 0 18 1 Use compression to make the web faster Google Developers 22 May 2013 原始内容存档于2014 06 25 引证错误 带有name属性 google use compression 的 lt ref gt 标签用不同内容定义了多次 deflate Why are major web sites using gzip Stack Overflow 18 April 2014 原始内容存档于2016 04 12 Compression Tests About Verve Studios 18 April 2014 原始内容存档于2015年1月2日 Lose the wait HTTP Compression Zoompf Web Performance 18 April 2014 原始内容存档于2016 04 04 22 0 22 1 Goodin Dan Gone in 30 seconds New attack plucks secrets from HTTPS protected pages Ars Technica Conde Nast 1 August 2013 2 August 2013 原始内容存档于2014 07 01 引证错误 带有name属性 Gooin20130801 的 lt ref gt 标签用不同内容定义了多次 Leyden John Step into the BREACH New attack developed to read encrypted web data The Register 2 August 2013 2 August 2013 原始内容存档于2016 04 30 外部链接 编辑RFC 2616 Hypertext Transfer Protocol HTTP 1 1 HTTP Content Coding Values 页面存档备份 存于互联网档案馆 by Internet Assigned Numbers Authority Compression with lighttpd 页面存档备份 存于互联网档案馆 Coding Horror HTTP Compression on IIS 6 0 页面存档备份 存于互联网档案馆 15 Seconds Web Site Compressionat the Wayback Machine 2011年7月16日存档 HTTP Compression resource page by the founder of VIGOS AG Constantin Rack Using HTTP Compression 页面存档备份 存于互联网档案馆 by Martin Brown of Server Watch Using HTTP Compression in PHP 页面存档备份 存于互联网档案馆 Dynamic and static HTTP compression with Apache httpd Browser HTTP Compression Test 页面存档备份 存于互联网档案馆 Check HTTP compression 页面存档备份 存于互联网档案馆 Check Gzip Compression Online 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title HTTP压缩 amp oldid 75462275, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。