目录搜索
GuidesAccess control CORSAuthenticationBrowser detection using the user agentCachingCaching FAQCompressionConditional requestsConnection management in HTTP 1.xContent negotiationContent negotiation: List of default Accept valuesCookiesCSPMessagesOverviewProtocol upgrade mechanismProxy servers and tunnelingProxy servers and tunneling: Proxy Auto-Configuration (PAC) filePublic Key PinningRange requestsRedirectionsResources and specificationsResources and URIsResponse codesServer-Side Access ControlSessionGuides: BasicsBasics of HTTPChoosing between www and non-www URLsData URIsEvolution of HTTPIdentifying resources on the WebMIME TypesMIME types: Complete list of MIME typesCSPContent-Security-PolicyContent-Security-Policy-Report-OnlyCSP: base-uriCSP: block-all-mixed-contentCSP: child-srcCSP: connect-srcCSP: default-srcCSP: font-srcCSP: form-actionCSP: frame-ancestorsCSP: frame-srcCSP: img-srcCSP: manifest-srcCSP: media-srcCSP: object-srcCSP: plugin-typesCSP: referrerCSP: report-uriCSP: require-sri-forCSP: sandboxCSP: script-srcCSP: style-srcCSP: upgrade-insecure-requestsCSP: worker-srcHeadersAcceptAccept-CharsetAccept-EncodingAccept-LanguageAccept-RangesAccess-Control-Allow-CredentialsAccess-Control-Allow-HeadersAccess-Control-Allow-MethodsAccess-Control-Allow-OriginAccess-Control-Expose-HeadersAccess-Control-Max-AgeAccess-Control-Request-HeadersAccess-Control-Request-MethodAgeAllowAuthorizationCache-ControlConnectionContent-DispositionContent-EncodingContent-LanguageContent-LengthContent-LocationContent-RangeContent-TypeCookieCookie2DateDNTETagExpectExpiresForwardedFromHeadersHostIf-MatchIf-Modified-SinceIf-None-MatchIf-RangeIf-Unmodified-SinceKeep-AliveLarge-AllocationLast-ModifiedLocationOriginPragmaProxy-AuthenticateProxy-AuthorizationPublic-Key-PinsPublic-Key-Pins-Report-OnlyRangeRefererReferrer-PolicyRetry-AfterServerSet-CookieSet-Cookie2SourceMapStrict-Transport-SecurityTETkTrailerTransfer-EncodingUpgrade-Insecure-RequestsUser-AgentUser-Agent: FirefoxVaryViaWarningWWW-AuthenticateX-Content-Type-OptionsX-DNS-Prefetch-ControlX-Forwarded-ForX-Forwarded-HostX-Forwarded-ProtoX-Frame-OptionsX-XSS-ProtectionMethodsCONNECTDELETEGETHEADMethodsOPTIONSPATCHPOSTPUTStatus100 Continue101 Switching Protocols200 OK201 Created202 Accepted203 Non-Authoritative Information204 No Content205 Reset Content206 Partial Content300 Multiple Choices301 Moved Permanently302 Found303 See Other304 Not Modified307 Temporary Redirect308 Permanent Redirect400 Bad Request401 Unauthorized403 Forbidden404 Not Found405 Method Not Allowed406 Not Acceptable407 Proxy Authentication Required408 Request Timeout409 Conflict410 Gone411 Length Required412 Precondition Failed413 Payload Too Large414 URI Too Long415 Unsupported Media Type416 Range Not Satisfiable417 Expectation Failed426 Upgrade Required428 Precondition Required429 Too Many Requests431 Request Header Fields Too Large451 Unavailable For Legal Reasons500 Internal Server Error501 Not Implemented502 Bad Gateway503 Service Unavailable504 Gateway Timeout505 HTTP Version Not Supported511 Network Authentication RequiredStatus
文字

压缩是提高网站性能的重要方法。对于某些文档,最多可减少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)都没有简单的方法来配置它。这种配置通常发生在代理级别。

上一篇:下一篇: