directory search
Guides Access control CORS Authentication Browser detection using the user agent Caching Caching FAQ Compression Conditional requests Connection management in HTTP 1.x Content negotiation Content negotiation: List of default Accept values Cookies CSP Messages Overview Protocol upgrade mechanism Proxy servers and tunneling Proxy servers and tunneling: Proxy Auto-Configuration (PAC) file Public Key Pinning Range requests Redirections Resources and specifications Resources and URIs Response codes Server-Side Access Control Session Guides: Basics Basics of HTTP Choosing between www and non-www URLs Data URIs Evolution of HTTP Identifying resources on the Web MIME Types MIME types: Complete list of MIME types CSP Content-Security-Policy Content-Security-Policy-Report-Only CSP: base-uri CSP: block-all-mixed-content CSP: child-src CSP: connect-src CSP: default-src CSP: font-src CSP: form-action CSP: frame-ancestors CSP: frame-src CSP: img-src CSP: manifest-src CSP: media-src CSP: object-src CSP: plugin-types CSP: referrer CSP: report-uri CSP: require-sri-for CSP: sandbox CSP: script-src CSP: style-src CSP: upgrade-insecure-requests CSP: worker-src Headers Accept Accept-Charset Accept-Encoding Accept-Language Accept-Ranges Access-Control-Allow-Credentials Access-Control-Allow-Headers Access-Control-Allow-Methods Access-Control-Allow-Origin Access-Control-Expose-Headers Access-Control-Max-Age Access-Control-Request-Headers Access-Control-Request-Method Age Allow Authorization Cache-Control Connection Content-Disposition Content-Encoding Content-Language Content-Length Content-Location Content-Range Content-Type Cookie Cookie2 Date DNT ETag Expect Expires Forwarded From Headers Host If-Match If-Modified-Since If-None-Match If-Range If-Unmodified-Since Keep-Alive Large-Allocation Last-Modified Location Origin Pragma Proxy-Authenticate Proxy-Authorization Public-Key-Pins Public-Key-Pins-Report-Only Range Referer Referrer-Policy Retry-After Server Set-Cookie Set-Cookie2 SourceMap Strict-Transport-Security TE Tk Trailer Transfer-Encoding Upgrade-Insecure-Requests User-Agent User-Agent: Firefox Vary Via Warning WWW-Authenticate X-Content-Type-Options X-DNS-Prefetch-Control X-Forwarded-For X-Forwarded-Host X-Forwarded-Proto X-Frame-Options X-XSS-Protection Methods CONNECT DELETE GET HEAD Methods OPTIONS PATCH POST PUT Status 100 Continue 101 Switching Protocols 200 OK 201 Created 202 Accepted 203 Non-Authoritative Information 204 No Content 205 Reset Content 206 Partial Content 300 Multiple Choices 301 Moved Permanently 302 Found 303 See Other 304 Not Modified 307 Temporary Redirect 308 Permanent Redirect 400 Bad Request 401 Unauthorized 403 Forbidden 404 Not Found 405 Method Not Allowed 406 Not Acceptable 407 Proxy Authentication Required 408 Request Timeout 409 Conflict 410 Gone 411 Length Required 412 Precondition Failed 413 Payload Too Large 414 URI Too Long 415 Unsupported Media Type 416 Range Not Satisfiable 417 Expectation Failed 426 Upgrade Required 428 Precondition Required 429 Too Many Requests 431 Request Header Fields Too Large 451 Unavailable For Legal Reasons 500 Internal Server Error 501 Not Implemented 502 Bad Gateway 503 Service Unavailable 504 Gateway Timeout 505 HTTP Version Not Supported 511 Network Authentication Required Status
characters

压缩是提高网站性能的重要方法。对于某些文档,最多可减少70%的尺寸可降低带宽容量需求。多年来,算法也变得更加高效,并且新的算法得到了客户端和服务器的支持。

在实践中,Web开发人员不需要实现压缩机制,浏览器和服务器都已经实现了压缩机制,但他们必须确保服务器配置充分。压缩发生在三个不同的级别:

  • 首先一些文件格式是用特定的优化方法压缩的,

  • 那么通用加密可以在HTTP级别发生(资源从头到尾被压缩传输),

  • 最后可以在HTTP连接的两个节点之间的连接级别定义压缩。

文件格式压缩

每种数据类型都有一些冗余,那就是浪费的空间。如果文本通常具有高达60%的冗余度,那么对于音频和视频等其他媒体,此速率可能会更高。与文本不同,这些其他媒体类型正在占用大量空间来存储,并且需要重新获得这种浪费的空间显得非常早。工程师设计了针对特定用途设计的文件格式所使用的优化压缩算法。用于文件的压缩算法可以分为两大类:

  • 无损压缩,其中压缩 - 解压缩循环不会改变恢复的数据。它匹配(字节到字节)与原始。对于图像gifpng使用无损压缩。

  • 有损压缩是循环改变原始数据的地方,对用户来说是不可感知的。

Web上的视频格式是有损和面向图像的,如jpeg

有些格式可以用于无损压缩或有损压缩,如webp通常有损算法可以配置为压缩或多或少,这当然会导致更少或更多的质量。为了获得更好的网站性能,在保持可接受的质量水平的同时尽可能进行压缩是理想的选择。对于图像来说,由工具生成的图像可能无法针对Web进行优化; 建议使用能够以所需质量尽可能压缩的工具。有很多专门为此设计的工具。

有损压缩算法通常比无损压缩算法更高效。

由于压缩对特定类型的文件效果更好,通常不会再次压缩它们。事实上,由于开销的成本(算法通常需要一个增加初始大小的字典)可能会高于额外的压缩增益,导致文件较大,因此这往往是反效果的。不要将以下两种技术用于压缩格式的文件。

端到端压缩

对于压缩,端到端压缩是网站最大的性能改进所在。端到端压缩指的是压缩由服务器完成的消息主体,并在到达客户端之前保持不变。无论中间节点是什么,它们都不会影响身体。

所有现代浏览器和服务器都支持它,唯一需要协商的是要使用的压缩算法。这些算法针对文本进行了优化。在20世纪90年代,压缩技术正在快速发展,许多连续的算法已被添加到可能的选择集中。目前,只有两个是相关的:gzip最常见的和br新的挑战者。

要选择要使用的算法,浏览器和服务器使用主动内容协商。浏览Accept-Encoding器用它支持的算法和它的优先顺序发送一个标题,服务器选择一个,用它压缩响应的主体,并使用Content-Encoding标题告诉浏览器它选择的算法。由于内容协商已经被用来根据编码来选择一个表示,所以在响应Vary中至少包含一个包含Content-Encoding这个标题的报头; 这样,缓存将能够缓存资源的不同表示。

由于压缩带来显着的性能改进,建议将其激活为所有文件,但已经压缩的文件如图像,音频文件和视频。

Apache支持压缩并使用mod_deflate ; 对于nginx有ngx_http_gzip_module ; 对于IIS,<httpCompression>元素。

逐跳压缩

逐跳压缩尽管与端到端压缩类似,但其差异在于一个基本要素:压缩不会发生在服务器的资源中,从而创建一个特定的表示,然后传输,但是在客户端和服务器之间的路径上的任何两个节点之间的消息。连续的中间节点之间的连接可以应用不同的压缩。

为此,HTTP使用类似于内容协商的机制进行端对端压缩:发送请求的节点使用TE标头通知它的意愿,而另一节点选择适当的方法,应用它并指示它的选择Transfer-Encoding头。

实际上,逐跳压缩对于服务器和客户端是透明的,并且很少使用。TE并且Transfer-Encoding主要用于通过块发送响应,从而允许在不知道其长度的情况下开始传输资源。

请注意,Transfer-Encoding在跳跃层使用和压缩非常罕见,大多数服务器(如Apache,nginx或IIS)都没有简单的方法来配置它。这种配置通常发生在代理级别。

Previous article: Next article: