{"id":15677,"date":"2026-11-07T08:05:00","date_gmt":"2026-11-07T07:05:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=15677"},"modified":"2026-10-26T13:32:33","modified_gmt":"2026-10-26T12:32:33","slug":"http-compression-by-file-type-what-to-measure","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/","title":{"rendered":"HTTP Compression by File Type: What to Measure"},"content":{"rendered":"<p>HTTP compression reduces response content for transfer. Whether gzip, Brotli or zstd is worthwhile depends on the actual content, compression settings and processing costs. A filename extension alone cannot provide a reliable answer.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/dia-15677-review-20261024.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"Text candidates, file structure and conditions for valid size comparisons\"><figcaption>Text candidates, file structure and conditions for valid size comparisons.<\/figcaption><\/figure>\n<h2>Text formats and already compressed formats<\/h2>\n<p>HTML, CSS, JavaScript, JSON, XML and SVG are often good candidates. Repeated strings and other statistical patterns allow shorter representations. Minification removes whitespace or shortens names, but repeated keywords and structures remain. Minified JavaScript can therefore still shrink substantially. JSON does not necessarily consist of unique values either.<\/p>\n<p>JPEG, PNG, WebP and AVIF already use compression. WOFF2 applies font-specific transformations and Brotli. Additional HTTP coding often achieves little for these formats, but may still save bytes or add overhead depending on the file. An unchanged response demonstrates a server decision, not the result of an actual second compression attempt.<\/p>\n<p>SVG is XML text despite serving as an image. ICO is a container that can hold bitmap data or already compressed PNG images. Neither \u201cevery ICO is uncompressed\u201d nor \u201cevery image is already optimally compressed\u201d is a sound rule.<\/p>\n<h2>No universal hundred-byte cutoff<\/h2>\n<p>Small responses can also shrink. A local test on 25 October 2026 used exactly 80 ASCII <code>a<\/code> characters. gzip level 6 produced 24 bytes, Brotli level 5 produced 10 bytes and zstd level 3 produced 21 bytes. In contrast, the three input characters <code>abc<\/code> grew to 23, 7 and 16 bytes. All six outputs were decoded and compared byte for byte with the inputs.<\/p>\n<p>These are artificial examples of content dependence, not website or loading-time measurements. Format implementations and settings can change the results. A server minimum-size setting is an operational tradeoff rather than a mathematical boundary for compressibility.<\/p>\n<p>Format overhead also differs: gzip includes a checksum, the ordinary Brotli stream does not, and a zstd content checksum is optional. A blanket explanation involving a header and checksum in every format would therefore be incorrect.<\/p>\n<h2>A meaningful comparison requires identical content<\/h2>\n<ol>\n<li>Each variant requires the same final resource URL, relevant request conditions and measurement period. Dynamic content may change between requests.<\/li>\n<li>Checks include HTTP status, final content type and actual <code>Content-Encoding<\/code>. Offering <code>br<\/code> does not force a Brotli response; even status 200 can contain a blocking page.<\/li>\n<li>Complete responses require decoding and comparison byte for byte or with a suitable hash. Differing or truncated content must be excluded from size comparisons.<\/li>\n<li>For identical content, the ratio is encoded response bytes divided by uncoded content bytes. For example, 20 KiB from 100 KiB means 20 percent remaining size or 80 percent saved.<\/li>\n<li>Claims about speed or CPU cost require repeated runs and separate timing measurements. Precompressed static files and dynamic compression have different costs.<\/li>\n<\/ol>\n<p>curl&#8217;s <code>size_download<\/code> measures downloaded payload bytes, not the complete network cost including HTTP headers, TLS and packet overhead. With <code>--compressed<\/code>, the saved file may already be decoded, making file size a different measurement. The local curl build must support the offered coding.<\/p>\n<h2>Cache variants and version markers<\/h2>\n<p>When representation selection depends on <code>Accept-Encoding<\/code>, <code>Vary: Accept-Encoding<\/code> describes that selection for caches. Checks must cover the relevant encoded and uncoded responses. A missing header can contribute to incorrect selection of reusable variants, but does not by itself demonstrate a broken page. Storage rules and other cache configuration also matter.<\/p>\n<p>An ETag is a version marker sent with a response. Different encoded byte sequences require different strong ETags. A shared weak validator prefixed with <code>W\/<\/code> can identify variants with the same meaning, such as compressed and uncompressed versions of the same page, but cannot replace content checks or assessment of the intended use. Different ETag values alone do not prove a correct implementation.<\/p>\n<h2>What the compression checker actually shows<\/h2>\n<p>The <a href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/toolbox\/compression-negotiation-checker-gzip-brotli-zstd\/\">Compression Negotiation Checker<\/a> requests a resource sequentially using <code>identity<\/code>, <code>gzip<\/code>, <code>br<\/code>, <code>zstd<\/code> and a fixed combination. The variant labelled browser is a curl request offering <code>gzip, deflate, br, zstd<\/code>, not an actual browser measurement or a universal browser header.<\/p>\n<p>The current checker reports differing decoded content but continues calculating size ratios. The decoded-body limit is 3 MiB. Such differences, truncated responses and error pages invalidate the comparison. The Vary evaluation also examines only one coded variant, while type classification does not inspect file contents. The tool provides clues rather than complete acceptance testing of a server configuration.<\/p>\n<div class=\"lw-faq\">\n<h2>Questions and answers<\/h2>\n<h3>Is Brotli always smaller than gzip?<\/h3>\n<p>No. Content, implementation, dictionary and compression level affect the result. The smallest file is also not necessarily the most economical choice for dynamic responses.<\/p>\n<h3>Which types belong in a compression rule?<\/h3>\n<p>Text formats are a useful starting point. Already compressed formats and ICO need separate assessment. Complete comparison responses with identical content, processing cost and caching requirements determine the decision.<\/p>\n<h3>Does a smaller response prove a faster page?<\/h3>\n<p>No. Network conditions, cache hits, connection setup, server work and browser execution affect loading time. A size measurement initially answers only the question about measured response bytes.<\/p>\n<\/div>\n<div class=\"lw-quellen\">\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.w3.org\/TR\/WOFF2\/\" target=\"_blank\" rel=\"noopener noreferrer\">W3C: WOFF2<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/oldnewthing\/20101022-00\/?p=12473\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft: PNG images in ICO<\/a><\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc1952.html\" target=\"_blank\" rel=\"noopener noreferrer\">RFC 1952: gzip<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/google\/brotli\" target=\"_blank\" rel=\"noopener noreferrer\">Google: Brotli<\/a><\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8878.html\" target=\"_blank\" rel=\"noopener noreferrer\">RFC 8878: zstd<\/a><\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9110.html\" target=\"_blank\" rel=\"noopener noreferrer\">RFC 9110: HTTP semantics<\/a><\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9111.html\" target=\"_blank\" rel=\"noopener noreferrer\">RFC 9111: HTTP caching<\/a><\/li>\n<li><a href=\"https:\/\/curl.se\/libcurl\/c\/CURLINFO_SIZE_DOWNLOAD_T.html\" target=\"_blank\" rel=\"noopener noreferrer\">curl: downloaded payload bytes<\/a><\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Guides\/Compression\" target=\"_blank\" rel=\"noopener noreferrer\">MDN: HTTP compression<\/a><\/li>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Headers\/Content-Encoding\" target=\"_blank\" rel=\"noopener noreferrer\">MDN: Content-Encoding<\/a><\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>HTTP compression depends on actual content, not just file type. Local examples explain small responses, ICO and WOFF2, while complete matching content and cache checks make size comparisons meaningful.<\/p>\n","protected":false},"author":1,"featured_media":24611,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[158],"tags":[91144,91099,91315],"class_list":["post-15677","post","type-post","status-publish","format-standard","hentry","category-tutorials-en-web-development","tag-devops","tag-server-administration","tag-web-performance"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>HTTP Compression by File Type: What to Measure | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"What a browser really receives for CSS, HTML, JavaScript, JSON, SVG, fonts and images, and the one image type that breaks the rule.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"HTTP Compression by File Type: What to Measure | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"What a browser really receives for CSS, HTML, JavaScript, JSON, SVG, fonts and images, and the one image type that breaks the rule.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-07T07:05:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-15677-review-20261024.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/http-compression-by-file-type-what-to-measure\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/http-compression-by-file-type-what-to-measure\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"HTTP Compression by File Type: What to Measure\",\"datePublished\":\"2026-11-07T07:05:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/http-compression-by-file-type-what-to-measure\\\/\"},\"wordCount\":825,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/http-compression-by-file-type-what-to-measure\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-15677-review-20261024.png\",\"keywords\":[\"DevOps\",\"Server Administration\",\"Web Performance\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/http-compression-by-file-type-what-to-measure\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/http-compression-by-file-type-what-to-measure\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/http-compression-by-file-type-what-to-measure\\\/\",\"name\":\"HTTP Compression by File Type: What to Measure | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/http-compression-by-file-type-what-to-measure\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/http-compression-by-file-type-what-to-measure\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-15677-review-20261024.png\",\"datePublished\":\"2026-11-07T07:05:00+00:00\",\"description\":\"What a browser really receives for CSS, HTML, JavaScript, JSON, SVG, fonts and images, and the one image type that breaks the rule.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/http-compression-by-file-type-what-to-measure\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/http-compression-by-file-type-what-to-measure\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/http-compression-by-file-type-what-to-measure\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-15677-review-20261024.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/hero-15677-review-20261024.png\",\"width\":1200,\"height\":630,\"caption\":\"HTTP Compression by File Type: What to Measure\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/en\\\/web-development\\\/tutorials-en-web-development\\\/http-compression-by-file-type-what-to-measure\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"HTTP Compression by File Type: What to Measure\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"HTTP Compression by File Type: What to Measure | Lukas Wojcik","description":"What a browser really receives for CSS, HTML, JavaScript, JSON, SVG, fonts and images, and the one image type that breaks the rule.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/","og_locale":"en_US","og_type":"article","og_title":"HTTP Compression by File Type: What to Measure | Lukas Wojcik","og_description":"What a browser really receives for CSS, HTML, JavaScript, JSON, SVG, fonts and images, and the one image type that breaks the rule.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-11-07T07:05:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-15677-review-20261024.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"HTTP Compression by File Type: What to Measure","datePublished":"2026-11-07T07:05:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/"},"wordCount":825,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-15677-review-20261024.png","keywords":["DevOps","Server Administration","Web Performance"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/","url":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/","name":"HTTP Compression by File Type: What to Measure | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-15677-review-20261024.png","datePublished":"2026-11-07T07:05:00+00:00","description":"What a browser really receives for CSS, HTML, JavaScript, JSON, SVG, fonts and images, and the one image type that breaks the rule.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-15677-review-20261024.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/10\/hero-15677-review-20261024.png","width":1200,"height":630,"caption":"HTTP Compression by File Type: What to Measure"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/en\/web-development\/tutorials-en-web-development\/http-compression-by-file-type-what-to-measure\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"HTTP Compression by File Type: What to Measure"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/15677","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=15677"}],"version-history":[{"count":8,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/15677\/revisions"}],"predecessor-version":[{"id":27411,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/15677\/revisions\/27411"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/24611"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=15677"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=15677"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=15677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}