{"id":5664,"date":"2025-09-15T23:35:05","date_gmt":"2025-09-15T23:35:05","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=5664"},"modified":"2025-09-15T23:35:05","modified_gmt":"2025-09-15T23:35:05","slug":"compression-dictionary-transport-%e3%81%ae-php-%e5%ae%9f%e8%a3%85-web%e5%9c%a7%e7%b8%ae%e3%81%ae%e6%ac%a1%e4%b8%96%e4%bb%a3%e6%8a%80%e8%a1%93","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/5664\/","title":{"rendered":"Compression Dictionary Transport \u306e PHP \u5b9f\u88c5 &#8211; Web\u5727\u7e2e\u306e\u6b21\u4e16\u4ee3\u6280\u8853"},"content":{"rendered":"\n<\/p>\n<div wp_automatic_readability=\"169.033069734\">\n<p><span itemscope=\"\" itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/b\/bengo4\/20250911\/20250911104412.png\" alt=\"\u30d6\u30ed\u30b0\u30bf\u30a4\u30c8\u30eb\u300cCompression Dictionary Transport \u306e PHP \u5b9f\u88c5 - Web\u5727\u7e2e\u306e\u6b21\u4e16\u4ee3\u6280\u8853\u300d\u304c\u8a18\u8f09\u3055\u308c\u3066\u3044\u308b\u3002\" width=\"1200\" height=\"630\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"\/><\/span><\/p>\n<h2 id=\"\u306f\u3058\u3081\u306b\">\u306f\u3058\u3081\u306b<\/h2>\n<p>\u73fe\u4ee3\u306e Web \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3044\u3066\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306f\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u3092\u5de6\u53f3\u3059\u308b\u91cd\u8981\u306a\u8981\u7d20\u3067\u3059\u3002\u3053\u308c\u307e\u3067\u3001gzip\u3001Brotli\u3001Zstandard \u3068\u3044\u3063\u305f\u512a\u308c\u305f\u5727\u7e2e\u6280\u8853\u304c\u3001\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3078\u306e\u30c7\u30fc\u30bf\u8ee2\u9001\u91cf\u3092\u524a\u6e1b\u3057\u3001Web \u30b5\u30a4\u30c8\u306e\u9ad8\u901f\u5316\u306b\u8ca2\u732e\u3057\u3066\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>\u3057\u304b\u3057\u3001SPA\uff08\u30b7\u30f3\u30b0\u30eb\u30da\u30fc\u30b8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\uff09\u3084 API \u99c6\u52d5\u578b\u306e\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u304c\u4e3b\u6d41\u3068\u306a\u308b\u4e2d\u3067\u3001\u65b0\u305f\u306a\u8ab2\u984c\u304c\u6d6e\u4e0a\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u306f\u3001\u6570\u5341 KB \u7a0b\u5ea6\u306e JSON \u30c7\u30fc\u30bf\u3084\u52d5\u7684\u306b\u8aad\u307f\u8fbc\u307e\u308c\u308b UI \u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3068\u3044\u3063\u305f\u3001\u6bd4\u8f03\u7684\u5c0f\u3055\u306a HTTP \u30ec\u30b9\u30dd\u30f3\u30b9\u306b\u304a\u3044\u3066\u3001\u5727\u7e2e\u52b9\u7387\u304c\u4e0a\u304c\u308a\u306b\u304f\u3044\u3068\u3044\u3046\u554f\u984c\u3067\u3059\u3002\u65e2\u5b58\u306e\u5727\u7e2e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306f\u3001\u30c7\u30fc\u30bf\u5185\u306b\u3042\u308b\u7a0b\u5ea6\u306e\u7e70\u308a\u8fd4\u3057\u30d1\u30bf\u30fc\u30f3\u304c\u5b58\u5728\u3057\u306a\u3051\u308c\u3070\u3001\u305d\u306e\u52b9\u679c\u3092\u5341\u5206\u306b\u767a\u63ee\u3067\u304d\u306a\u3044\u3068\u3044\u3046\u7279\u6027\u304c\u3042\u308b\u305f\u3081\u3067\u3059\u3002<\/p>\n<p>\u3053\u306e\u8ab2\u984c\u3092\u89e3\u6c7a\u3059\u3079\u304f\u767b\u5834\u3057\u305f\u306e\u304c\u3001\u65b0\u3057\u3044 Web \u6a19\u6e96\u4ed5\u69d8<strong>\u300cCompression Dictionary Transport\u300d<\/strong>\u3067\u3059\u3002<\/p>\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001\u3053\u306e Compression Dictionary Transport \u306e PHP \u3078\u306e\u5b9f\u88c5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n<h3 id=\"\u767a\u60f3\u306e\u8ee2\u63db\u7e70\u308a\u8fd4\u3057\u30d1\u30bf\u30fc\u30f3\u3092\u4e8b\u524d\u306b\u5171\u6709\u3059\u308b\">\u767a\u60f3\u306e\u8ee2\u63db\uff1a\u300c\u7e70\u308a\u8fd4\u3057\u30d1\u30bf\u30fc\u30f3\u300d\u3092\u4e8b\u524d\u306b\u5171\u6709\u3059\u308b<\/h3>\n<p>Compression Dictionary Transport \u306e\u6838\u5fc3\u7684\u306a\u30a2\u30a4\u30c7\u30a2\u306f\u3001\u975e\u5e38\u306b\u30b7\u30f3\u30d7\u30eb\u3067\u3059\u3002<\/p>\n<p><strong>\u5727\u7e2e\u3057\u305f\u3044\u30c7\u30fc\u30bf\u306e\u4e2d\u306b\u7e70\u308a\u8fd4\u3057\u30d1\u30bf\u30fc\u30f3\u304c\u5c11\u306a\u3044\u306a\u3089\u3001\u30b5\u30fc\u30d0\u30fc\u3068\u30d6\u30e9\u30a6\u30b6\u306e\u9593\u3067\u3001\u3042\u3089\u304b\u3058\u3081\u300c\u5171\u901a\u306e\u8f9e\u66f8\u300d\u3092\u5171\u6709\u3057\u3066\u304a\u3051\u3070\u826f\u3044\u3002<\/strong><\/p>\n<p>\u3053\u306e\u300c\u8f9e\u66f8\u300d\u3068\u306f\u3001\u30b5\u30a4\u30c8\u3067\u983b\u7e41\u306b\u4f7f\u308f\u308c\u308b\u6587\u5b57\u5217\u3001HTML \u30bf\u30b0\u306e\u69cb\u9020\u3001JavaScript \u306e\u5b9a\u578b\u30b3\u30fc\u30c9\u3001CSS \u306e\u30af\u30e9\u30b9\u540d\u306a\u3069\u3001\u4e88\u60f3\u3055\u308c\u308b\u7e70\u308a\u8fd4\u3057\u30d1\u30bf\u30fc\u30f3\u3092\u96c6\u3081\u305f\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002<br \/>\n\u3053\u308c\u3092\u4e8b\u524d\u306b\u5171\u6709\u3059\u308b\u3053\u3068\u3067\u3001\u305f\u3068\u3048\u5c0f\u3055\u306a\u30c7\u30fc\u30bf\u3067\u3042\u3063\u3066\u3082\u3001\u8f9e\u66f8\u5185\u306e\u30d1\u30bf\u30fc\u30f3\u3068\u4e00\u81f4\u3059\u308b\u90e8\u5206\u3092\u52b9\u7387\u7684\u306b\u53c2\u7167\u3078\u3068\u7f6e\u304d\u63db\u3048\u3001\u9a5a\u7570\u7684\u306a\u5727\u7e2e\u7387\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/p>\n<h2 id=\"Compression-Dictionary-Transport-\u306e\u4ed5\u7d44\u307f\">Compression Dictionary Transport \u306e\u4ed5\u7d44\u307f<\/h2>\n<p><a target=\"_blank\" href=\"https:\/\/datatracker.ietf.org\/doc\/draft-ietf-httpbis-compression-dictionary\/\">Compression Dictionary Transport<\/a><sup id=\"fnref:1\"><a target=\"_blank\" href=\"#fn:1\" rel=\"footnote\">1<\/a><\/sup> \u306f\u73fe\u5728\u3001IETF \u3067\u6a19\u6e96\u5316\u304c\u9032\u3081\u3089\u308c\u3066\u304a\u308a\u3001\u4e3b\u8981\u306a\u30d6\u30e9\u30a6\u30b6\u3067\u306e\u5b9f\u88c5\u3082\u59cb\u307e\u308a\u3064\u3064\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u305d\u306e\u57fa\u672c\u7684\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306f\u3001Brotli \u5b9f\u88c5\u3068 Zstandard \u5b9f\u88c5\u3067\u5171\u901a\u3057\u3066\u304a\u308a\u3001HTTP \u30d8\u30c3\u30c0\u3092\u4ecb\u3057\u305f\u30b5\u30fc\u30d0\u30fc\u3068\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u9023\u643a\u306b\u3088\u3063\u3066\u6210\u308a\u7acb\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<h3 id=\"\u4e3b\u8981\u306aHTTP\u30d8\u30c3\u30c0\u30fc\">\u4e3b\u8981\u306aHTTP\u30d8\u30c3\u30c0\u30fc<\/h3>\n<div class=\"s_table\"><table>\n<thead>\n<tr>\n<th> \u30d8\u30c3\u30c0\u30fc <\/th>\n<th> \u5f79\u5272 <\/th>\n<\/tr>\n<\/thead>\n<tbody wp_automatic_readability=\"8\">\n<tr wp_automatic_readability=\"4\">\n<td> <code>Accept-Encoding<\/code> <\/td>\n<td> \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u8f9e\u66f8\u5727\u7e2e (<code>dcb<\/code>, <code>dcz<\/code> \u306a\u3069) \u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u30b5\u30fc\u30d0\u30fc\u306b\u901a\u77e5\u3057\u307e\u3059\u3002 <\/td>\n<\/tr>\n<tr wp_automatic_readability=\"3\">\n<td> <code>Use-As-Dictionary<\/code> <\/td>\n<td> \u30b5\u30fc\u30d0\u30fc\u304c\u8f9e\u66f8\u305d\u306e\u3082\u306e\u3092\u914d\u4fe1\u3059\u308b\u969b\u306b\u4f7f\u7528\u3057\u3001\u30d6\u30e9\u30a6\u30b6\u306b\u3053\u308c\u3092\u8f9e\u66f8\u3068\u3057\u3066\u30ad\u30e3\u30c3\u30b7\u30e5\u3059\u308b\u3088\u3046\u6307\u793a\u3057\u307e\u3059\u3002 <\/td>\n<\/tr>\n<tr wp_automatic_readability=\"3\">\n<td> <code>Available-Dictionary<\/code> <\/td>\n<td> \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u30ad\u30e3\u30c3\u30b7\u30e5\u6e08\u307f\u306e\u8f9e\u66f8\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u3092\u30b5\u30fc\u30d0\u30fc\u306b\u901a\u77e5\u3057\u3001\u5229\u7528\u53ef\u80fd\u3067\u3042\u308b\u3053\u3068\u3092\u4f1d\u3048\u307e\u3059\u3002 <\/td>\n<\/tr>\n<tr wp_automatic_readability=\"2\">\n<td> <code>Content-Encoding<\/code> <\/td>\n<td> \u30b5\u30fc\u30d0\u30fc\u304c\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u8f9e\u66f8\u5727\u7e2e\u3057\u305f\u3053\u3068\u3092\u793a\u3057\u307e\u3059 (<code>dcb<\/code> \u307e\u305f\u306f <code>dcz<\/code>)\u3002 <\/td>\n<\/tr>\n<tr wp_automatic_readability=\"4\">\n<td> <code>Vary<\/code> <\/td>\n<td> <code>Accept-Encoding, Available-Dictionary<\/code> \u3092\u6307\u5b9a\u3057\u3001\u30d7\u30ed\u30ad\u30b7\u30ad\u30e3\u30c3\u30b7\u30e5\u306a\u3069\u304c\u6b63\u3057\u304f\u52d5\u4f5c\u3059\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002 <\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<h3 id=\"\u57fa\u672c\u7684\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\">\u57fa\u672c\u7684\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc<\/h3>\n<ol>\n<li><strong>\u8f9e\u66f8\u306e\u914d\u5e03<\/strong>: \u30b5\u30fc\u30d0\u30fc\u304c <code>Use-As-Dictionary<\/code> \u30d8\u30c3\u30c0\u30fc\u3092\u4ed8\u3051\u3066\u8f9e\u66f8\u30ea\u30bd\u30fc\u30b9\u3092\u914d\u4fe1\u3059\u308b\u3002<\/li>\n<li><strong>\u8f9e\u66f8\u306e\u4fdd\u5b58<\/strong>: \u30d6\u30e9\u30a6\u30b6\u306f\u8f9e\u66f8\u3092\u4fdd\u5b58\u3057\u3001\u305d\u306e\u5185\u5bb9\u304b\u3089 SHA-256 \u30cf\u30c3\u30b7\u30e5\u5024\u3092\u8a08\u7b97\u3059\u308b\u3002<\/li>\n<li><strong>\u8f9e\u66f8\u306e\u5229\u7528\u901a\u77e5<\/strong>: \u6b21\u56de\u4ee5\u964d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u3001\u30d6\u30e9\u30a6\u30b6\u306f <code>Available-Dictionary<\/code> \u30d8\u30c3\u30c0\u30fc\u306b\u8a08\u7b97\u3057\u305f\u30cf\u30c3\u30b7\u30e5\u5024\u3092\u542b\u3081\u3066\u9001\u4fe1\u3059\u308b\u3002<\/li>\n<li><strong>\u8f9e\u66f8\u5727\u7e2e\u306e\u5b9f\u884c<\/strong>: \u30b5\u30fc\u30d0\u30fc\u306f <code>Available-Dictionary<\/code> \u30d8\u30c3\u30c0\u30fc\u3092\u53d7\u3051\u53d6\u308b\u3068\u3001\u81ea\u8eab\u304c\u4fdd\u6301\u3059\u308b\u8f9e\u66f8\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u3068\u7167\u5408\u3059\u308b\u3002\u4e00\u81f4\u3059\u308c\u3070\u3001\u305d\u306e\u8f9e\u66f8\u3092\u4f7f\u3063\u3066\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u5727\u7e2e\u3059\u308b\u3002<\/li>\n<li><strong>\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u8fd4\u5374<\/strong>: \u30b5\u30fc\u30d0\u30fc\u306f <code>Content-Encoding<\/code> \u30d8\u30c3\u30c0\u30fc\uff08\u4f8b\uff1a <code>dcb<\/code>, <code>dcz<\/code>\uff09\u3092\u4ed8\u4e0e\u3057\u3066\u3001\u8f9e\u66f8\u5727\u7e2e\u3055\u308c\u305f\u30c7\u30fc\u30bf\u3092\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u8fd4\u3059\u3002<\/li>\n<li><strong>\u30c7\u30fc\u30bf\u306e\u4f38\u5f35<\/strong>: \u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u53d7\u3051\u53d6\u3063\u305f\u30d6\u30e9\u30a6\u30b6\u306f\u3001\u6307\u5b9a\u3055\u308c\u305f\u5171\u6709\u8f9e\u66f8\u3092\u4f7f\u3063\u3066\u30c7\u30fc\u30bf\u3092\u6b63\u3057\u304f\u4f38\u5f35\uff08\u89e3\u51cd\uff09\u3057\u3001\u5143\u306e\u30c7\u30fc\u30bf\u3092\u5fa9\u5143\u3059\u308b\u3002<\/li>\n<\/ol>\n<p>\u3053\u306e\u4ed5\u7d44\u307f\u306f\u3001\u7279\u306b\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3067\u7d76\u5927\u306a\u52b9\u679c\u3092\u767a\u63ee\u3057\u307e\u3059\u3002<\/p>\n<ul>\n<li><strong>SPA<\/strong>: \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3054\u3068\u306b JS \u30d0\u30f3\u30c9\u30eb\u304b\u3089\u8f9e\u66f8\u3092\u751f\u6210\u3057\u3001API \u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u5727\u7e2e\u306b\u5229\u7528\u3059\u308b\u3002<\/li>\n<li><strong>\u983b\u7e41\u306b\u66f4\u65b0\u3055\u308c\u308b\u30e9\u30a4\u30d6\u30c7\u30fc\u30bf<\/strong>: \u5171\u901a\u3059\u308b\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u8f9e\u66f8\u3068\u3057\u3066\u5171\u6709\u3057\u3001\u5dee\u5206\u3060\u3051\u3092\u52b9\u7387\u7684\u306b\u8ee2\u9001\u3059\u308b\u3002<\/li>\n<li><strong>\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u9593\u306eAPI\u901a\u4fe1<\/strong>: \u30b5\u30fc\u30d3\u30b9\u9593\u3067\u5171\u901a\u306e\u8f9e\u66f8\u3092\u7528\u610f\u3057\u3001\u901a\u4fe1\u30da\u30a4\u30ed\u30fc\u30c9\u3092\u524a\u6e1b\u3059\u308b\u3002<\/li>\n<\/ul>\n<h2 id=\"Brotli-\u306b\u3088\u308b\u5b9f\u88c5-Dictionary-Compressed-Brotli\">Brotli \u306b\u3088\u308b\u5b9f\u88c5 (Dictionary-Compressed Brotli)<\/h2>\n<p><a target=\"_blank\" href=\"https:\/\/github.com\/kjdev\/php-ext-brotli\">php-ext-brotli<\/a> \u3067\u306f\u3001<code>Content-Encoding: dcb<\/code> \u3068\u3057\u3066 Compression Dictionary Transport \u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002<\/p>\n<h3 id=\"DCB-\u30d0\u30a4\u30ca\u30ea\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\">DCB \u30d0\u30a4\u30ca\u30ea\u30d5\u30a9\u30fc\u30de\u30c3\u30c8<\/h3>\n<p><code>dcb<\/code> \u3067\u5727\u7e2e\u3055\u308c\u305f\u30c7\u30fc\u30bf\u306f\u3001\u4ed5\u69d8\u306b\u5f93\u3063\u305f\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u69cb\u7bc9\u3055\u308c\u307e\u3059\u3002<\/p>\n<pre class=\"code\" data-lang=\"\" data-unlink=\"\">+--------------+-------------------------------+------------------+\n| Magic Header | Dictionary SHA-256 Hash       | Compressed Data  |\n| (4 bytes)    | (32 bytes)                    | (variable)       |\n+--------------+-------------------------------+------------------+\n| 0xff444342   | SHA-256 of dictionary content | Brotli compressed|\n|              |                               | with dictionary  |\n+--------------+-------------------------------+------------------+<\/pre>\n<h3 id=\"PHP-\u3067\u306e\u5b9f\u88c5\u8a73\u7d30-php-ext-brotli\">PHP \u3067\u306e\u5b9f\u88c5\u8a73\u7d30 (<code>php-ext-brotli<\/code>)<\/h3>\n<p>\u5b9f\u88c5\u306f\u3001PHP \u306e\u51fa\u529b\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0 (<code>ob_start<\/code>) \u3092\u30d5\u30c3\u30af\u3059\u308b\u5f62\u3067\u884c\u308f\u308c\u307e\u3059\u3002<\/p>\n<p><strong>1. \u8a2d\u5b9a\u3068\u6709\u52b9\u5316<\/strong><\/p>\n<p><code>php.ini<\/code> \u307e\u305f\u306f <code>ini_set<\/code> \u3067\u8f9e\u66f8\u3078\u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3057\u3001<code>ob_start<\/code> \u3067\u30cf\u30f3\u30c9\u30e9\u3092\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"code lang-php\" data-lang=\"php\" data-unlink=\"\"><span class=\"synSpecial\"><?php <\/span???>\n\n<span class=\"synIdentifier\">ini_set<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">'brotli.output_compression_dictionary'<\/span>, <span class=\"synConstant\">'\/path\/to\/your\/shared.dict'<\/span><span class=\"synSpecial\">)<\/span>;\n\n\n<span class=\"synIdentifier\">ob_start<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">'ob_brotli_handler'<\/span><span class=\"synSpecial\">)<\/span>;\n\n\n<span class=\"synPreProc\">echo<\/span> <span class=\"synConstant\">\"Hello\"<\/span>;\n<span class=\"synSpecial\">?&gt;<\/span>\n<\/span><\/pre>\n<p><strong>2. C\u8a00\u8a9e\u30ec\u30d9\u30eb\u306e\u30b3\u30a2\u30ed\u30b8\u30c3\u30af<\/strong><\/p>\n<p>\u5185\u90e8\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u51e6\u7406\u304c\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002<\/p>\n<ul>\n<li><strong>\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u89e3\u6790<\/strong>: <code>Accept-Encoding<\/code> \u30d8\u30c3\u30c0\u3092\u89e3\u6790\u3057\u3001<code>dcb<\/code> \u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u308b\u304b\u3092\u30d3\u30c3\u30c8\u30d5\u30e9\u30b0\u3067\u7ba1\u7406\u3059\u308b\u3002<\/li>\n<li><strong>\u8f9e\u66f8\u306e\u691c\u8a3c<\/strong>: <code>HTTP_AVAILABLE_DICTIONARY<\/code> \u30d8\u30c3\u30c0\u306e\u5024\u3068\u3001\u30b5\u30fc\u30d0\u30fc\u5074\u3067\u6307\u5b9a\u3055\u308c\u305f\u8f9e\u66f8\u304b\u3089\u8a08\u7b97\u3057\u305f SHA-256 \u30cf\u30c3\u30b7\u30e5\u5024\u3092\u6bd4\u8f03\u3059\u308b\u3002\u30cf\u30c3\u30b7\u30e5\u304c\u4e00\u81f4\u3057\u306a\u3044\u5834\u5408\u306f\u3001\u5b89\u5168\u306b\u901a\u5e38\u306e Brotli \u5727\u7e2e (<code>br<\/code>) \u306b\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u3059\u308b\u3002<\/li>\n<li><strong>Brotli\u30a8\u30f3\u30b8\u30f3\u3078\u306e\u8f9e\u66f8\u30a2\u30bf\u30c3\u30c1<\/strong>: Brotli \u306e\u30a8\u30f3\u30b3\u30fc\u30c0\u30fc\u306b\u8f9e\u66f8\u3092\u30bb\u30c3\u30c8\u3059\u308b\u3002<\/li>\n<li><strong>DCB\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u69cb\u7bc9<\/strong>: \u5727\u7e2e\u5f8c\u3001\u30ec\u30b9\u30dd\u30f3\u30b9\u306e\u5148\u982d\u306b\u30de\u30b8\u30c3\u30af\u30d8\u30c3\u30c0\u30fc\u3068\u8f9e\u66f8\u30cf\u30c3\u30b7\u30e5\u3092\u8ffd\u52a0\u3057\u3066\u3001\u6700\u7d42\u7684\u306a <code>dcb<\/code> \u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u30c7\u30fc\u30bf\u3092\u4f5c\u6210\u3059\u308b\u3002<\/li>\n<\/ul>\n<pre class=\"code lang-c\" data-lang=\"c\" data-unlink=\"\">\nzval *available = <span class=\"synIdentifier\">zend_hash_str_find<\/span>(..., <span class=\"synConstant\">\"HTTP_AVAILABLE_DICTIONARY\"<\/span>, ...);\n<span class=\"synStatement\">if<\/span> (available) {\n    \n    PHP_SHA256_CTX context;\n    <span class=\"synIdentifier\">PHP_SHA256Init<\/span>(&amp;context);\n    <span class=\"synIdentifier\">PHP_SHA256Update<\/span>(&amp;context, ...);\n    <span class=\"synIdentifier\">PHP_SHA256Final<\/span>(ctx-&gt;dict_digest, &amp;context);\n\n    \n    zend_string *b64 = <span class=\"synIdentifier\">php_base64_encode<\/span>(ctx-&gt;dict_digest, <span class=\"synConstant\">32<\/span>);\n    <span class=\"synStatement\">if<\/span> (<span class=\"synIdentifier\">memcmp<\/span>(<span class=\"synIdentifier\">ZSTR_VAL<\/span>(b64), <span class=\"synIdentifier\">Z_STRVAL_P<\/span>(available) + <span class=\"synConstant\">1<\/span>, ...)) {\n        \n        <span class=\"synIdentifier\">BROTLI_G<\/span>(compression_coding) &amp;= ~PHP_BROTLI_ENCODING_DCB;\n    }\n}\n\n\n<span class=\"synStatement\">if<\/span> (dict) { \n    \n    ctx-&gt;dictionary = <span class=\"synIdentifier\">BrotliEncoderPrepareDictionary<\/span>(BROTLI_SHARED_DICTIONARY_RAW, <span class=\"synIdentifier\">ZSTR_LEN<\/span>(dict), <span class=\"synIdentifier\">ZSTR_VAL<\/span>(dict), BROTLI_MAX_QUALITY, <span class=\"synConstant\">NULL<\/span>, <span class=\"synConstant\">NULL<\/span>, <span class=\"synConstant\">NULL<\/span>);\n    \n    <span class=\"synStatement\">if<\/span> (ctx-&gt;dictionary == <span class=\"synConstant\">NULL<\/span>\n        || !<span class=\"synIdentifier\">BrotliEncoderAttachPreparedDictionary<\/span>(ctx-&gt;encoder,\n                                                  ctx-&gt;dictionary)) {\n        \n        <span class=\"synStatement\">return<\/span> FAILURE;\n    }\n}\n<\/pre>\n<p>\u3053\u306e\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u6a5f\u69cb\u306b\u3088\u308a\u3001Compression Dictionary Transport \u304c\u5229\u7528\u3067\u304d\u306a\u3044\u74b0\u5883\u3067\u3082\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f\u554f\u984c\u306a\u304f\u52d5\u4f5c\u3057\u307e\u3059\u3002<\/p>\n<h2 id=\"Zstandard-\u306b\u3088\u308b\u5b9f\u88c5-Dictionary-Compressed-ZStandard\">Zstandard \u306b\u3088\u308b\u5b9f\u88c5 (Dictionary-Compressed ZStandard)<\/h2>\n<p><a target=\"_blank\" href=\"https:\/\/github.com\/kjdev\/php-ext-zstd\">php-ext-zstd<\/a> \u3067\u306f\u3001<code>Content-Encoding: dcz<\/code> \u3068\u3057\u3066 Compression Dictionary Transport \u3092\u5b9f\u88c5\u3057\u307e\u3059\u3002<\/p>\n<h3 id=\"DCZ-\u30d0\u30a4\u30ca\u30ea\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\">DCZ \u30d0\u30a4\u30ca\u30ea\u30d5\u30a9\u30fc\u30de\u30c3\u30c8<\/h3>\n<p><code>dcz<\/code> \u3067\u5727\u7e2e\u3055\u308c\u305f\u30c7\u30fc\u30bf\u306f\u3001\u4ed5\u69d8\u306b\u5f93\u3063\u305f\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u69cb\u7bc9\u3055\u308c\u307e\u3059\u3002<\/p>\n<pre class=\"code\" data-lang=\"\" data-unlink=\"\">+--------------------+-------------------------------+------------------+\n| Magic Header       | Dictionary SHA-256 Hash       | Compressed Data  |\n| (8 bytes)          | (32 bytes)                    | (variable)       |\n+--------------------+-------------------------------+------------------+\n| 0x5e2a4d1820000000 | SHA-256 of dictionary content | ZSTD compressed  |\n|                    |                               | with dictionary  |\n+--------------------+-------------------------------+------------------+<\/pre>\n<h3 id=\"PHP-\u3067\u306e\u5b9f\u88c5\u8a73\u7d30-php-ext-zstd\">PHP \u3067\u306e\u5b9f\u88c5\u8a73\u7d30 (<code>php-ext-zstd<\/code>)<\/h3>\n<p>\u3053\u3061\u3089\u3082 <code>ob_start<\/code> \u3092\u5229\u7528\u3057\u305f\u51fa\u529b\u30cf\u30f3\u30c9\u30e9\u3068\u3057\u3066\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><strong>1. \u8a2d\u5b9a\u3068\u6709\u52b9\u5316<\/strong><\/p>\n<p><code>php.ini<\/code> \u307e\u305f\u306f <code>ini_set<\/code> \u3067\u8f9e\u66f8\u3078\u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3057\u3001<code>ob_start<\/code> \u3067\u30cf\u30f3\u30c9\u30e9\u3092\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"code lang-php\" data-lang=\"php\" data-unlink=\"\"><span class=\"synSpecial\"><?php <\/span???>\n\n<span class=\"synIdentifier\">ini_set<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">'zstd.output_compression_dict'<\/span>, <span class=\"synConstant\">'\/path\/to\/your\/dictionary.txt'<\/span><span class=\"synSpecial\">)<\/span>;\n\n\n<span class=\"synIdentifier\">ob_start<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">'ob_zstd_handler'<\/span><span class=\"synSpecial\">)<\/span>;\n\n\n<span class=\"synPreProc\">echo<\/span> <span class=\"synConstant\">\"Hello\"<\/span>;\n<span class=\"synSpecial\">?&gt;<\/span>\n<\/span><\/pre>\n<p><strong>2. C\u8a00\u8a9e\u30ec\u30d9\u30eb\u306e\u30b3\u30a2\u30ed\u30b8\u30c3\u30af<\/strong><\/p>\n<p>\u57fa\u672c\u7684\u306a\u6d41\u308c\u306f Brotli \u5b9f\u88c5\u3068\u4f3c\u3066\u3044\u307e\u3059\u304c\u3001Zstandard \u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u6a5f\u80fd\u3092\u4f7f\u3063\u3066\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul>\n<li><strong>\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u89e3\u6790<\/strong>: \u540c\u69d8\u306b <code>Accept-Encoding<\/code> \u3092\u89e3\u6790\u3057 <code>dcz<\/code> \u30d5\u30e9\u30b0\u3092\u7ba1\u7406\u3059\u308b\u3002<\/li>\n<li><strong>\u8f9e\u66f8\u306e\u691c\u8a3c<\/strong>: <code>HTTP_AVAILABLE_DICTIONARY<\/code> \u30d8\u30c3\u30c0\u3068\u30b5\u30fc\u30d0\u30fc\u5074\u8f9e\u66f8\u306e\u30cf\u30c3\u30b7\u30e5\u5024\u3092\u6bd4\u8f03\u3059\u308b\u691c\u8a3c\u30ed\u30b8\u30c3\u30af\u3082\u540c\u69d8\u3067\u3042\u308b\u3002\u4e0d\u4e00\u81f4\u306e\u5834\u5408\u306f\u901a\u5e38\u306e <code>zstd<\/code> \u5727\u7e2e\u306b\u30d5\u30a9\u30fc\u30eb\u30d0\u30c3\u30af\u3059\u308b\u3002<\/li>\n<li><strong>Zstandard\u30a8\u30f3\u30b8\u30f3\u3078\u306e\u8f9e\u66f8\u9069\u7528<\/strong>: <code>ZSTD_createCDict<\/code> \u3067\u8f9e\u66f8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u3001<code>ZSTD_CCtx_refCDict<\/code> \u3067\u5727\u7e2e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u306b\u30bb\u30c3\u30c8\u3059\u308b\u3002<\/li>\n<li><strong>DCZ\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u69cb\u7bc9<\/strong>: \u5727\u7e2e\u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u5148\u982d\u306b\u3001\u4ed5\u69d8\u3067\u5b9a\u3081\u3089\u308c\u305f 8 \u30d0\u30a4\u30c8\u306e\u30de\u30b8\u30c3\u30af\u30d8\u30c3\u30c0\u30fc\u3068 32 \u30d0\u30a4\u30c8\u306e\u8f9e\u66f8\u30cf\u30c3\u30b7\u30e5\u3092\u66f8\u304d\u8fbc\u3080\u3002<\/li>\n<\/ul>\n<pre class=\"code lang-c\" data-lang=\"c\" data-unlink=\"\">\nzval *available = <span class=\"synIdentifier\">zend_hash_str_find<\/span>(..., <span class=\"synConstant\">\"HTTP_AVAILABLE_DICTIONARY\"<\/span>, ...);\n<span class=\"synStatement\">if<\/span> (available) {\n    \n    PHP_SHA256_CTX context;\n    <span class=\"synIdentifier\">PHP_SHA256Init<\/span>(&amp;context);\n    <span class=\"synIdentifier\">PHP_SHA256Update<\/span>(&amp;context, ...);\n    <span class=\"synIdentifier\">PHP_SHA256Final<\/span>(ctx-&gt;dict_digest, &amp;context);\n\n    \n    zend_string *b64 = <span class=\"synIdentifier\">php_base64_encode<\/span>(ctx-&gt;dict_digest, <span class=\"synConstant\">32<\/span>);\n    <span class=\"synStatement\">if<\/span> (<span class=\"synIdentifier\">memcmp<\/span>(<span class=\"synIdentifier\">ZSTR_VAL<\/span>(b64), <span class=\"synIdentifier\">Z_STRVAL_P<\/span>(available) + <span class=\"synConstant\">1<\/span>, ...)) {\n        \n        <span class=\"synIdentifier\">ZSTD_G<\/span>(compression_coding) &amp;= ~PHP_ZSTD_ENCODING_DCZ;\n    }\n}\n\n\n<span class=\"synStatement\">if<\/span> (dict) { \n    ctx-&gt;cdict = <span class=\"synIdentifier\">ZSTD_createCDict<\/span>(<span class=\"synIdentifier\">ZSTR_VAL<\/span>(dict), <span class=\"synIdentifier\">ZSTR_LEN<\/span>(dict), (<span class=\"synType\">int<\/span>)level);\n    <span class=\"synStatement\">if<\/span> (!ctx-&gt;cdict) {\n        \n        <span class=\"synStatement\">return<\/span> FAILURE;\n    }\n\n    <span class=\"synIdentifier\">ZSTD_CCtx_refCDict<\/span>(ctx-&gt;cctx, ctx-&gt;cdict);\n}\n<\/pre>\n<h2 id=\"\u30c6\u30b9\u30c8\">\u30c6\u30b9\u30c8<\/h2>\n<p><a target=\"_blank\" href=\"https:\/\/github.com\/horo-t\/compression-dictionary-transport-shop-demo\">compression-dictionary-transport-shop-demo<\/a> \u3068\u3044\u3046\u30c7\u30e2\u3092\u4f7f\u7528\u3057\u3066\u30c6\u30b9\u30c8\u3092\u884c\u3044\u307e\u3059\u3002<\/p>\n<p><strong>1. \u30d5\u30a1\u30a4\u30eb\u306e\u6e96\u5099<\/strong><\/p>\n<p>\u307e\u305a\u3001\u30c7\u30e2\u7528\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u3044\u304f\u3064\u304b\u5909\u66f4\u30fb\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p><code>public\/index.html<\/code> \u306e\u672b\u5c3e\u306b\u3042\u308b\u8f9e\u66f8\u306e\u30ea\u30f3\u30af\u3092\u3001PHP \u3067\u914d\u4fe1\u3059\u308b\u3088\u3046\u306b\u5909\u66f4\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"code lang-diff\" data-lang=\"diff\" data-unlink=\"\"><span class=\"synSpecial\">- <link rel=\"&quot;dictionary&quot;\" href=\"&quot;\/dictionary&quot;\"\/><\/span>\n<span class=\"synSpecial\">- <link rel=\"&quot;compression-dictionary&quot;\" href=\"&quot;\/dictionary&quot;\"\/><\/span>\n<span class=\"synIdentifier\">+ <link rel=\"&quot;compression-dictionary&quot;\" href=\"&quot;.\/dictionary.php&quot;\"\/><\/span>\n<\/pre>\n<p><code>public\/dictionary.php<\/code> \u3092\u4ee5\u4e0b\u306e\u5185\u5bb9\u3067\u4f5c\u6210\u3057\u307e\u3059<sup id=\"fnref:2\"><a target=\"_blank\" href=\"#fn:2\" rel=\"footnote\">2<\/a><\/sup>\u3002<\/p>\n<pre class=\"code lang-php\" data-lang=\"php\" data-unlink=\"\"><span class=\"synSpecial\"><?php <\/span???>\n\n<span class=\"synStatement\">$<\/span><span class=\"synIdentifier\">file<\/span> <span class=\"synStatement\">=<\/span> <span class=\"synConstant\">__DIR__<\/span> <span class=\"synStatement\">.<\/span> <span class=\"synConstant\">'\/items\/shop.dict'<\/span>; \n<span class=\"synIdentifier\">header<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">'Use-As-Dictionary: match=\"\/items\/*\"'<\/span><span class=\"synSpecial\">)<\/span>; \n<span class=\"synIdentifier\">header<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">'Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT'<\/span><span class=\"synSpecial\">)<\/span>;\n<span class=\"synIdentifier\">header<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">'Content-Type: application\/octet-stream'<\/span><span class=\"synSpecial\">)<\/span>;\n<span class=\"synIdentifier\">header<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">'Content-Length: '<\/span> <span class=\"synStatement\">.<\/span> <span class=\"synIdentifier\">filesize<\/span><span class=\"synSpecial\">(<\/span><span class=\"synStatement\">$<\/span><span class=\"synIdentifier\">file<\/span><span class=\"synSpecial\">))<\/span>;\n<span class=\"synIdentifier\">header<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">'Accept-Ranges: bytes'<\/span><span class=\"synSpecial\">)<\/span>;\n<span class=\"synIdentifier\">readfile<\/span><span class=\"synSpecial\">(<\/span><span class=\"synStatement\">$<\/span><span class=\"synIdentifier\">file<\/span><span class=\"synSpecial\">)<\/span>;\n<\/span><\/pre>\n<p>\u6b21\u306b\u3001\u30c7\u30e2\u7528\u306e\u8f9e\u66f8\u3068\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u914d\u7f6e\u3057\u307e\u3059\u3002<\/p>\n<ul>\n<li><code>data\/shop.dict<\/code> \u3092 <code>public\/items\/shop.dict<\/code> \u306b\u30b3\u30d4\u30fc\u3059\u308b\u3002<\/li>\n<li><code>data\/*.html<\/code> \u3092 <code>public\/items\/*.php<\/code> \u3068\u3057\u3066\u30b3\u30d4\u30fc\u3059\u308b\u3002<\/li>\n<\/ul>\n<p>\u30b3\u30d4\u30fc\u3057\u305f\u5404 PHP \u30d5\u30a1\u30a4\u30eb\uff08<code>1f3bf.php<\/code>\u306a\u3069\uff09\u306e\u5148\u982d\u306b\u3001\u8a2d\u5b9a\u3092\u8aad\u307f\u8fbc\u3080\u305f\u3081\u306e <code>include<\/code> \u6587\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"code lang-diff\" data-lang=\"diff\" data-unlink=\"\"><span class=\"synIdentifier\">+ <?php include __DIR__ . '\/header.php'; ????><\/span>\n  \n  <!--\n   Copyright 2022 Google LLC\n<\/pre>\n<p>&#22311;&#32302;&#35373;&#23450;&#12434;&#35352;&#36848;&#12377;&#12427; <code>public\/items\/header.php<\/code> &#12434;&#20197;&#19979;&#12398;&#20869;&#23481;&#12391;&#20316;&#25104;&#12375;&#12414;&#12377;&#12290;<\/p>\n<pre class=\"code lang-php\" data-lang=\"php\" data-unlink><span class=\"synSpecial\"><?php<\/span>\n<span class=\"synComment\">\/\/ Brotli (dcb) &#12395;&#12424;&#12427;&#36766;&#26360;&#22311;&#32302;&#12398;&#35373;&#23450;<\/span>\n<span class=\"synComment\">\/\/<\/span>\n<span class=\"synComment\">\/\/ &#12463;&#12521;&#12452;&#12450;&#12531;&#12488;&#12364; dcb &#12434;&#12469;&#12509;&#12540;&#12488;&#12375;&#12390;&#12356;&#12427;&#22580;&#21512;&#12398;&#12415;&#12289;&#36766;&#26360;&#12501;&#12449;&#12452;&#12523;&#12434;&#25351;&#23450;&#12375;&#12414;&#12377;&#12290;<\/span>\n<span class=\"synComment\">\/\/ &#12371;&#12428;&#12395;&#12424;&#12426;&#12289;dcb &#38750;&#23550;&#24540;&#12398;&#12463;&#12521;&#12452;&#12450;&#12531;&#12488;&#12395;&#12399;&#36890;&#24120;&#12398; Brotli(br)&#22311;&#32302;&#12364;&#36969;&#29992;&#12373;&#12428;&#12414;&#12377;&#12290;<\/span>\n<span class=\"synStatement\">if<\/span> <span class=\"synSpecial\">(<\/span><span class=\"synIdentifier\">strpos<\/span><span class=\"synSpecial\">(<\/span><span class=\"synStatement\">$<\/span><span class=\"synIdentifier\">_SERVER<\/span><span class=\"synSpecial\">[<\/span><span class=\"synConstant\">'HTTP_ACCEPT_ENCODING'<\/span><span class=\"synSpecial\">]<\/span>, <span class=\"synConstant\">'dcb'<\/span><span class=\"synSpecial\">)<\/span> <span class=\"synStatement\">!==<\/span> <span class=\"synConstant\">false<\/span><span class=\"synSpecial\">)<\/span> <span class=\"synSpecial\">{<\/span>\n    <span class=\"synIdentifier\">ini_set<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">'brotli.output_compression_dict'<\/span>, <span class=\"synConstant\">__DIR__<\/span> <span class=\"synStatement\">.<\/span> <span class=\"synConstant\">'\/shop.dict'<\/span><span class=\"synSpecial\">)<\/span>;\n<span class=\"synSpecial\">}<\/span>\n<span class=\"synIdentifier\">ob_start<\/span><span class=\"synSpecial\">(<\/span><span class=\"synConstant\">'ob_brotli_handler'<\/span><span class=\"synSpecial\">)<\/span>;\n\n<span class=\"synComment\">\/\/ \/\/ Zstandard (dcz) &#12434;&#35430;&#12377;&#22580;&#21512;&#12399;&#12371;&#12385;&#12425;&#12434;&#26377;&#21177;&#21270;&#12375;&#12414;&#12377;<\/span>\n<span class=\"synComment\">\/\/ if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'dcz') !== false) {<\/span>\n<span class=\"synComment\">\/\/     ini_set('zstd.output_compression_dict', __DIR__ . '\/shop.dict');<\/span>\n<span class=\"synComment\">\/\/ }<\/span>\n<span class=\"synComment\">\/\/ ob_start('ob_zstd_handler');<\/span>\n<\/pre>\n<p>&#26368;&#32066;&#30340;&#12395;&#12289;<code>public<\/code> &#12487;&#12451;&#12524;&#12463;&#12488;&#12522;&#12399;&#20197;&#19979;&#12398;&#12424;&#12358;&#12394;&#27083;&#25104;&#12395;&#12394;&#12426;&#12414;&#12377;&#12290;<\/p>\n<pre class=\"code\" data-lang=\"\" data-unlink>public\n|-- about.html\n|-- dictionary.php\n|-- index.html\n|-- items\n|   |-- 1f3bf.php\n|   |-- 1f45e.php\n|   |-- (&#20182;&#12398;&#12450;&#12452;&#12486;&#12512;PHP&#12501;&#12449;&#12452;&#12523;)...\n|   |-- header.php\n|   `-- shop.dict\n`-- static\n    |-- (&#30465;&#30053;)...<\/pre>\n<p>&#12371;&#12398; <code>public<\/code> &#12487;&#12451;&#12524;&#12463;&#12488;&#12522;&#12434;&#12489;&#12461;&#12517;&#12513;&#12531;&#12488;&#12523;&#12540;&#12488;&#12392;&#12375;&#12390;&#12289;PHP &#12364;&#21205;&#20316;&#12377;&#12427; Web &#12469;&#12540;&#12496;&#12540;&#12434;&#36215;&#21205;&#12375;&#12414;&#12377;&#12290;<\/p>\n<p><strong>2. &#21205;&#20316;&#30906;&#35469;<\/strong><\/p>\n<p>Compression Dictionary Transport &#12399; Chrome &#12364;&#20808;&#34892;&#12375;&#12390;&#12469;&#12509;&#12540;&#12488;&#12375;&#12390;&#12356;&#12427;&#12383;&#12417;&#12289;Chrome &#12502;&#12521;&#12454;&#12470;&#12391;&#30906;&#35469;&#12375;&#12414;&#12377;&#12290;<\/p>\n<p>&#12414;&#12378; <code>index.html<\/code> &#12395;&#12450;&#12463;&#12475;&#12473;&#12375;&#12414;&#12377;&#12290;&#12506;&#12540;&#12472;&#12392;&#20849;&#12395; <code>dictionary.php<\/code> &#12364;&#35501;&#12415;&#36796;&#12414;&#12428;&#12289;&#36766;&#26360;&#12364;&#12502;&#12521;&#12454;&#12470;&#12395;&#30331;&#37682;&#12373;&#12428;&#12414;&#12377;&#12290;&#30331;&#37682;&#12373;&#12428;&#12383;&#36766;&#26360;&#12399; <code>chrome:\/\/net-internals\/#sharedDictionary<\/code> &#12391;&#30906;&#35469;&#12391;&#12365;&#12414;&#12377;&#12290;<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"sharedDictionary\"><span itemscope itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/b\/bengo4\/20250911\/20250911104809.webp\" alt=\"\" width=\"502\" height=\"361\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"><\/span><figcaption>sharedDictionary<\/figcaption><\/figure>\n<\/p>\n<p>&#27425;&#12395;&#12289;&#21830;&#21697;&#12450;&#12452;&#12486;&#12512;&#12506;&#12540;&#12472;&#65288;<code>items\/1f45e.php<\/code>&#12394;&#12393;&#65289;&#12395;&#12450;&#12463;&#12475;&#12473;&#12375;&#12414;&#12377;&#12290;Chrome &#12398;&#38283;&#30330;&#32773;&#12484;&#12540;&#12523;&#12391;&#12493;&#12483;&#12488;&#12527;&#12540;&#12463;&#12522;&#12463;&#12456;&#12473;&#12488;&#12434;&#30906;&#35469;&#12377;&#12427;&#12392;&#12289;&#20197;&#19979;&#12398;&#12424;&#12358;&#12395;&#21205;&#20316;&#12375;&#12390;&#12356;&#12427;&#12371;&#12392;&#12364;&#12431;&#12363;&#12426;&#12414;&#12377;&#12290;<\/p>\n<ul>\n<li>&#12522;&#12463;&#12456;&#12473;&#12488;&#12504;&#12483;&#12480;&#12395;&#36766;&#26360;&#22311;&#32302;&#12434;&#12469;&#12509;&#12540;&#12488;&#12377;&#12427;&#12371;&#12392;&#12434;&#31034;&#12377; <code>Accept-Encoding: ..., dcb, ...<\/code> &#12364;&#21547;&#12414;&#12428;&#12390;&#12356;&#12427;&#12290;<\/li>\n<li>&#12522;&#12463;&#12456;&#12473;&#12488;&#12504;&#12483;&#12480;&#12395;&#21033;&#29992;&#21487;&#33021;&#12394;&#36766;&#26360;&#12434;&#36890;&#30693;&#12377;&#12427; <code>Available-Dictionary<\/code> &#12364;&#21547;&#12414;&#12428;&#12390;&#12356;&#12427;&#12290;<\/li>\n<li>&#12524;&#12473;&#12509;&#12531;&#12473;&#12504;&#12483;&#12480;&#12395; <code>dcb<\/code> &#12391;&#22311;&#32302;&#12373;&#12428;&#12383;&#12371;&#12392;&#12434;&#31034;&#12377; <code>Content-Encoding: dcb<\/code> &#12364;&#36820;&#12373;&#12428;&#12390;&#12356;&#12427;&#12290;<\/li>\n<\/ul>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"items-header\"><span itemscope itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/b\/bengo4\/20250911\/20250911104857.webp\" alt=\"\" width=\"595\" height=\"518\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"><\/span><figcaption>items-header<\/figcaption><\/figure>\n<\/p>\n<p><code>Content-Encoding<\/code> &#12364;&#36969;&#29992;&#12373;&#12428;&#12383;&#24460;&#12398;&#12467;&#12531;&#12486;&#12531;&#12484;&#12469;&#12452;&#12474;&#12434;&#27604;&#36611;&#12377;&#12427;&#12392;&#12289;&#12381;&#12398;&#21177;&#26524;&#12399;&#19968;&#30446;&#30637;&#28982;&#12391;&#12377;&#12290;<\/p>\n<p><figure class=\"figure-image figure-image-fotolife\" title=\"items-size\"><span itemscope itemtype=\"http:\/\/schema.org\/Photograph\"><img decoding=\"async\" src=\"https:\/\/cdn-ak.f.st-hatena.com\/images\/fotolife\/b\/bengo4\/20250911\/20250911104919.webp\" alt=\"\" width=\"581\" height=\"140\" loading=\"lazy\" title=\"\" class=\"hatena-fotolife\" itemprop=\"image\"><\/span><figcaption>items-size<\/figcaption><\/figure>\n<\/p>\n<p>&#36890;&#24120;&#12398; Brotli (<code>br<\/code>) &#22311;&#32302;&#12392;&#27604;&#36611;&#12375;&#12390;&#12418;&#12289;&#36766;&#26360;&#22311;&#32302; (<code>dcb<\/code>) &#12391;&#12399;&#12487;&#12540;&#12479;&#12469;&#12452;&#12474;&#12364;&#22823;&#24133;&#12395;&#21066;&#28187;&#12373;&#12428;&#12390;&#12356;&#12427;&#12371;&#12392;&#12364;&#12431;&#12363;&#12426;&#12414;&#12377;&#12290;<\/p>\n<h2 id=\"&#35506;&#38988;&#12392;&#23637;&#26395;\">&#35506;&#38988;&#12392;&#23637;&#26395;<\/h2>\n<h3 id=\"&#35506;&#38988;\">&#35506;&#38988;<\/h3>\n<ol>\n<li><strong>&#12502;&#12521;&#12454;&#12470;&#12469;&#12509;&#12540;&#12488;<\/strong>: 2025 &#24180;&#29694;&#22312;&#12289;Compression Dictionary Transport &#12399;&#12414;&#12384;&#23455;&#39443;&#30340;&#12394;&#27573;&#38542;&#12395;&#12354;&#12426;&#12289;Chrome &#12364;&#20808;&#34892;&#12375;&#12390;&#12356;&#12427;&#29366;&#27841;&#12391;&#12354;&#12427;&#12290;&#26222;&#21450;&#12395;&#12399;&#20182;&#12398;&#12502;&#12521;&#12454;&#12470;&#12391;&#12398;&#27161;&#28310;&#12469;&#12509;&#12540;&#12488;&#12364;&#24453;&#12383;&#12428;&#12427;&#12290;<\/li>\n<li><strong>&#36766;&#26360;&#31649;&#29702;<\/strong>: &#12469;&#12452;&#12488;&#12398;&#12467;&#12531;&#12486;&#12531;&#12484;&#12395;&#21512;&#12431;&#12379;&#12390;&#26368;&#36969;&#12394;&#36766;&#26360;&#12434;&#12393;&#12398;&#12424;&#12358;&#12395;&#29983;&#25104;&#12375;&#12289;&#26356;&#26032;&#12375;&#12390;&#12356;&#12367;&#12363;&#12392;&#12356;&#12358;&#36939;&#29992;&#25126;&#30053;&#12364;&#37325;&#35201;&#12395;&#12394;&#12427;&#12290;<\/li>\n<li><strong>&#12461;&#12515;&#12483;&#12471;&#12517;&#25126;&#30053;<\/strong>: <code>Vary: Accept-Encoding, Available-Dictionary<\/code> &#12504;&#12483;&#12480;&#12540;&#12434;&#27491;&#12375;&#12367;&#25201;&#12360;&#12427; CDN &#12420;&#12503;&#12525;&#12461;&#12471;&#12398;&#35373;&#23450;&#12364;&#24517;&#35201;&#12391;&#12354;&#12427;&#12290;<\/li>\n<li><strong>&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;<\/strong>: &#36766;&#26360;&#12398;&#12495;&#12483;&#12471;&#12517;&#26908;&#35388;&#12399;&#12289;&#24847;&#22259;&#12375;&#12394;&#12356;&#12487;&#12540;&#12479;&#23637;&#38283;&#12434;&#38450;&#12368;&#12383;&#12417;&#12398;&#37325;&#35201;&#12394;&#12475;&#12461;&#12517;&#12522;&#12486;&#12451;&#27231;&#27083;&#12391;&#12354;&#12427;&#12290;&#23455;&#35013;&#12391;&#12399;&#12371;&#12398;&#26908;&#35388;&#12364;&#24517;&#38920;&#12392;&#12394;&#12427;&#12290;<\/li>\n<\/ol>\n<h3 id=\"&#23637;&#26395;\">&#23637;&#26395;<\/h3>\n<ul>\n<li><strong>&#33258;&#21205;&#36766;&#26360;&#29983;&#25104;<\/strong>: AI &#12420;&#27231;&#26800;&#23398;&#32722;&#12434;&#29992;&#12356;&#12390;&#12289;&#12469;&#12452;&#12488;&#12398;&#12467;&#12531;&#12486;&#12531;&#12484;&#12363;&#12425;&#26368;&#36969;&#12394;&#36766;&#26360;&#12434;&#33258;&#21205;&#29983;&#25104;&#12377;&#12427;&#12424;&#12358;&#12394;&#12484;&#12540;&#12523;&#12398;&#30331;&#22580;&#12364;&#26399;&#24453;&#12373;&#12428;&#12427;&#12290;<\/li>\n<li><strong>&#27161;&#28310;&#21270;&#12398;&#36914;&#23637;<\/strong>: IETF &#12391;&#12398;&#27161;&#28310;&#21270;&#12364;&#23436;&#20102;&#12375;&#12289;&#20027;&#35201;&#12394;&#12502;&#12521;&#12454;&#12470;&#12420; CDN &#12391;&#12398;&#12469;&#12509;&#12540;&#12488;&#12377;&#12427;&#12371;&#12392;&#12391;&#12289;&#26222;&#21450;&#12364;&#36914;&#12416;&#12290;<\/li>\n<li><strong>&#12373;&#12425;&#12394;&#12427;&#24540;&#29992;<\/strong>: Web &#12467;&#12531;&#12486;&#12531;&#12484;&#37197;&#20449;&#12384;&#12369;&#12391;&#12394;&#12367;&#12289;&#12510;&#12452;&#12463;&#12525;&#12469;&#12540;&#12499;&#12473;&#38291;&#12398;&#36890;&#20449;&#12506;&#12452;&#12525;&#12540;&#12489;&#21066;&#28187;&#12394;&#12393;&#12289;&#27963;&#29992;&#12398;&#24133;&#12364;&#24195;&#12364;&#12387;&#12390;&#12356;&#12367;&#12384;&#12429;&#12358;&#12290;<\/li>\n<\/ul>\n<h2 id=\"&#12414;&#12392;&#12417;\">&#12414;&#12392;&#12417;<\/h2>\n<p>Compression Dictionary Transport &#12399;&#12289;Web &#12497;&#12501;&#12457;&#12540;&#12510;&#12531;&#12473;&#12434;&#27425;&#12398;&#12524;&#12505;&#12523;&#12408;&#24341;&#12365;&#19978;&#12370;&#12427;&#21487;&#33021;&#24615;&#12434;&#31192;&#12417;&#12383;&#12289;&#38750;&#24120;&#12395;&#26377;&#26395;&#12394;&#25216;&#34899;&#12391;&#12377;&#12290;<\/p>\n<p>&#20170;&#22238;&#12289;PHP &#12398;&#25313;&#24373;&#27231;&#33021;&#12391;&#12354;&#12427; <a target=\"_blank\" href=\"https:\/\/github.com\/kjdev\/php-ext-brotli\">php-ext-brotli<\/a> &#12392; <a target=\"_blank\" href=\"https:\/\/github.com\/kjdev\/php-ext-zstd\">php-ext-zstd<\/a> &#12398;&#20001;&#26041;&#12395;&#12371;&#12398;&#27231;&#33021;&#12364;&#23455;&#35013;&#12373;&#12428;&#12383;&#12371;&#12392;&#12391;&#12289;PHP &#12518;&#12540;&#12470;&#12540;&#12364;&#12371;&#12398;&#26368;&#20808;&#31471;&#25216;&#34899;&#12398;&#24681;&#24693;&#12434;&#21463;&#12369;&#12427;&#36947;&#31563;&#12364;&#25299;&#12363;&#12428;&#12414;&#12375;&#12383;&#12290;<\/p>\n<p><strong>&#23455;&#35013;&#12398;&#25216;&#34899;&#30340;&#12495;&#12452;&#12521;&#12452;&#12488;<\/strong>:<\/p>\n<ul>\n<li><strong>&#36879;&#36942;&#30340;&#12394;&#23455;&#35013;<\/strong>: <code>ob_start<\/code> &#12420; <code>php.ini<\/code> &#12398;&#35373;&#23450;&#12395;&#12424;&#12426;&#12289;&#26082;&#23384;&#12398;&#12450;&#12503;&#12522;&#12465;&#12540;&#12471;&#12519;&#12531;&#12467;&#12540;&#12489;&#12434;&#12411;&#12412;&#22793;&#26356;&#12377;&#12427;&#12371;&#12392;&#12394;&#12367;&#23566;&#20837;&#12391;&#12365;&#12427;&#12290;<\/li>\n<li><strong>&#22533;&#29282;&#12394;&#12501;&#12457;&#12540;&#12523;&#12496;&#12483;&#12463;<\/strong>: &#36766;&#26360;&#22311;&#32302;&#12364;&#20351;&#12360;&#12394;&#12356;&#29872;&#22659;&#12391;&#12418;&#12289;&#33258;&#21205;&#30340;&#12395;&#36890;&#24120;&#12398; Brotli\/Zstandard &#22311;&#32302;&#12395;&#20999;&#12426;&#26367;&#12431;&#12427;&#23433;&#20840;&#12394;&#35373;&#35336;&#12391;&#12354;&#12427;&#12290;<\/li>\n<li><strong>&#20181;&#27096;&#28310;&#25312;<\/strong>: IETF &#12391;&#31574;&#23450;&#20013;&#12398;&#20181;&#27096;&#12395;&#22522;&#12389;&#12356;&#12383;&#12289;&#27491;&#30906;&#12394;&#12496;&#12452;&#12490;&#12522;&#12501;&#12457;&#12540;&#12510;&#12483;&#12488;&#12392;&#12504;&#12483;&#12480;&#12540;&#20966;&#29702;&#12364;&#23455;&#35013;&#12373;&#12428;&#12390;&#12356;&#12427;&#12290;<\/li>\n<\/ul>\n<p>&#12380;&#12402;&#12371;&#12398;&#26032;&#12375;&#12356;&#22311;&#32302;&#25216;&#34899;&#12434;&#35430;&#12375;&#12289;&#12381;&#12398;&#21177;&#26524;&#12434;&#20307;&#24863;&#12375;&#12390;&#12415;&#12390;&#12367;&#12384;&#12373;&#12356;&#12290;<\/p>\n<div class=\"footnotes\">\n<hr\/>\n<ol>\n<li id=\"fn:1\">\nMDN Web Doc: <a target=\"_blank\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Guides\/Compression_dictionary_transport\">https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Guides\/Compression_dictionary_transport<\/a><a target=\"_blank\" href=\"#fnref:1\" rev=\"footnote\">&#8617;<\/a><\/li>\n<li id=\"fn:2\">\n&#36766;&#26360;&#12501;&#12449;&#12452;&#12523;&#12434;&#37197;&#24067;&#12377;&#12428;&#12400;&#12424;&#12356;&#12384;&#12369;&#12394;&#12398;&#12391; PHP &#12398;&#12424;&#12358;&#12394;&#21205;&#30340;&#20966;&#29702;&#12391;&#12399;&#12394;&#12367;&#12390; Web &#12469;&#12540;&#12496;&#12540;&#12363;&#12425;&#37197;&#24067;&#12377;&#12427;&#12424;&#12358;&#12395;&#12375;&#12390;&#12418;&#21839;&#38988;&#12394;&#12356;&#65288;Use-As-Dictionary &#12504;&#12483;&#12480;&#12399;&#24517;&#35201;&#65289;<a target=\"_blank\" href=\"#fnref:2\" rev=\"footnote\">&#8617;<\/a><\/li>\n<\/ol>\n<\/div>\n<\/div>\n<footer class=\"entry-footer\">\n<div class=\"entry-tags-wrapper\">\n<div class=\"entry-tags\">\n      <span class=\"entry-tag\"><br \/>\n        <a target=\"_blank\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Compression%20Dictionary%20Transport\" class=\"entry-tag-link\"><\/p>\n<p>          <span class=\"entry-tag-icon\">#<\/span><span class=\"entry-tag-label\">Compression Dictionary Transport<\/span><br \/>\n        <\/a><br \/>\n      <\/span><\/p>\n<p>      <span class=\"entry-tag\"><br \/>\n        <a target=\"_blank\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Web%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0\" class=\"entry-tag-link\"><\/p>\n<p>          <span class=\"entry-tag-icon\">#<\/span><span class=\"entry-tag-label\">Web&#12497;&#12501;&#12457;&#12540;&#12510;&#12531;&#12473;&#12481;&#12517;&#12540;&#12491;&#12531;&#12464;<\/span><br \/>\n        <\/a><br \/>\n      <\/span><\/p>\n<p>      <span class=\"entry-tag\"><br \/>\n        <a target=\"_blank\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/PHP%E6%8B%A1%E5%BC%B5\" class=\"entry-tag-link\"><\/p>\n<p>          <span class=\"entry-tag-icon\">#<\/span><span class=\"entry-tag-label\">PHP&#25313;&#24373;<\/span><br \/>\n        <\/a><br \/>\n      <\/span><\/p>\n<p>      <span class=\"entry-tag\"><br \/>\n        <a target=\"_blank\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Brotli\" class=\"entry-tag-link\"><\/p>\n<p>          <span class=\"entry-tag-icon\">#<\/span><span class=\"entry-tag-label\">Brotli<\/span><br \/>\n        <\/a><br \/>\n      <\/span><\/p>\n<p>      <span class=\"entry-tag\"><br \/>\n        <a target=\"_blank\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Zstandard\" class=\"entry-tag-link\"><\/p>\n<p>          <span class=\"entry-tag-icon\">#<\/span><span class=\"entry-tag-label\">Zstandard<\/span><br \/>\n        <\/a><br \/>\n      <\/span>\n      <\/div>\n<\/div>\n<p class=\"entry-footer-section track-inview-by-gtm\" data-gtm-track-json=\"{&quot;area&quot;: &quot;finish_reading&quot;}\">\n  <span class=\"author vcard\"><span class=\"fn\" data-load-nickname=\"1\" data-user-name=\"bengo4\" >bengo4<\/span><\/span><br \/>\n  <span class=\"entry-footer-time\"><a target=\"_blank\" href=\"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000\"><time data-relative datetime=\"2025-09-15T23:00:00Z\" title=\"2025-09-15T23:00:00Z\" class=\"updated\">2025-09-16 08:00<\/time><\/a><\/span><\/p>\n<div\n    class=\"hatena-star-container\"\n    data-hatena-star-container\n    data-hatena-star-url=\"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000\"\n    data-hatena-star-title=\"Compression Dictionary Transport &#12398; PHP &#23455;&#35013; - Web&#22311;&#32302;&#12398;&#27425;&#19990;&#20195;&#25216;&#34899;\"\n    data-hatena-star-variant=\"profile-icon\"\n    data-hatena-star-profile-url-template=\"https:\/\/blog.hatena.ne.jp\/{username}\/\"\n  ><\/div>\n<div class=\"social-buttons\">\n<div class=\"social-button-item\">\n      <a target=\"_blank\" href=\"https:\/\/b.hatena.ne.jp\/entry\/s\/creators.bengo4.com\/entry\/2025\/09\/16\/080000\" class=\"hatena-bookmark-button\" data-hatena-bookmark-url=\"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000\" data-hatena-bookmark-layout=\"vertical-balloon\" data-hatena-bookmark-lang=\"ja\" title=\"&#12371;&#12398;&#35352;&#20107;&#12434;&#12399;&#12390;&#12394;&#12502;&#12483;&#12463;&#12510;&#12540;&#12463;&#12395;&#36861;&#21152;\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/b.st-hatena.com\/images\/entry-button\/button-only.gif\" alt=\"&#12371;&#12398;&#35352;&#20107;&#12434;&#12399;&#12390;&#12394;&#12502;&#12483;&#12463;&#12510;&#12540;&#12463;&#12395;&#36861;&#21152;\" width=\"20\" height=\"20\" style=\"border: none;\" \/><\/a>\n    <\/div>\n<div class=\"social-button-item\">\n<div class=\"fb-share-button\" data-layout=\"box_count\" data-href=\"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000\"><\/div>\n<\/p><\/div>\n<div class=\"social-button-item\">\n      <a\n          class=\"entry-share-button entry-share-button-twitter test-share-button-twitter\"\n          href=\"https:\/\/x.com\/intent\/tweet?hashtags=Compression+Dictionary+Transport&hashtags=Web%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0&hashtags=PHP%E6%8B%A1%E5%BC%B5&hashtags=Brotli&hashtags=Zstandard&text=Compression+Dictionary+Transport+%E3%81%AE+PHP+%E5%AE%9F%E8%A3%85+-+Web%E5%9C%A7%E7%B8%AE%E3%81%AE%E6%AC%A1%E4%B8%96%E4%BB%A3%E6%8A%80%E8%A1%93+-+%E5%BC%81%E8%AD%B7%E5%A3%AB%E3%83%89%E3%83%83%E3%83%88%E3%82%B3%E3%83%A0%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE+Creators%E2%80%99+blog&url=https%3A%2F%2Fcreators.bengo4.com%2Fentry%2F2025%2F09%2F16%2F080000\"\n          title=\"X&#65288;Twitter&#65289;&#12391;&#25237;&#31295;&#12377;&#12427;\"\n        ><\/a>\n    <\/div>\n<\/div>\n<div class=\"customized-footer\">\n<div class=\"entry-footer-modules\" id=\"entry-footer-secondary-modules\">        <\/div>\n<\/p><\/div>\n<\/footer><\/div>\n<\/article>\n<p>  <!-- rakuten_ad_target_end --><br \/>\n  <!-- google_ad_section_end --><\/p><\/div>\n<p><script>(function(d, s, id) {\n  var js, fjs = d.getElementsByTagName(s)[0];\n  if (d.getElementById(id)) return;\n  js = d.createElement(s); js.id = id;\n  js.src = \"\/\/connect.facebook.net\/ja_JP\/sdk.js#xfbml=1&appId=719729204785177&version=v17.0\";\n  fjs.parentNode.insertBefore(js, fjs);\n}(document, 'script', 'facebook-jssdk'));<\/script><br \/>\n<br \/>\n<br \/><a href=\"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\u306f\u3058\u3081\u306b \u73fe\u4ee3\u306e Web \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3044\u3066\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306f\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u3092\u5de6\u53f3\u3059\u308b\u91cd\u8981\u306a\u8981\u7d20\u3067\u3059\u3002\u3053\u308c\u307e\u3067\u3001gzip\u3001Brotli\u3001Zstandard \u3068\u3044\u3063\u305f\u512a\u308c\u305f\u5727\u7e2e\u6280\u8853\u304c\u3001\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3078\u306e\u30c7\u30fc\u30bf [&hellip;]","protected":false},"author":1,"featured_media":5665,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-5664","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-company-tec"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Compression Dictionary Transport \u306e PHP \u5b9f\u88c5 - Web\u5727\u7e2e\u306e\u6b21\u4e16\u4ee3\u6280\u8853 - \u30dd\u30b1\u30b3\u30f3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Compression Dictionary Transport \u306e PHP \u5b9f\u88c5 - Web\u5727\u7e2e\u306e\u6b21\u4e16\u4ee3\u6280\u8853 - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"\u306f\u3058\u3081\u306b \u73fe\u4ee3\u306e Web \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3044\u3066\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306f\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u3092\u5de6\u53f3\u3059\u308b\u91cd\u8981\u306a\u8981\u7d20\u3067\u3059\u3002\u3053\u308c\u307e\u3067\u3001gzip\u3001Brotli\u3001Zstandard \u3068\u3044\u3063\u305f\u512a\u308c\u305f\u5727\u7e2e\u6280\u8853\u304c\u3001\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3078\u306e\u30c7\u30fc\u30bf [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-15T23:35:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fb2Fbengo42F202509112F20250911104412.pn.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1300\" \/>\n\t<meta property=\"og:image:height\" content=\"683\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"2\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/creators.bengo4.com\\\/entry\\\/2025\\\/09\\\/16\\\/080000#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/5664\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"Compression Dictionary Transport \u306e PHP \u5b9f\u88c5 &#8211; Web\u5727\u7e2e\u306e\u6b21\u4e16\u4ee3\u6280\u8853\",\"datePublished\":\"2025-09-15T23:35:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/5664\\\/\"},\"wordCount\":145,\"image\":{\"@id\":\"https:\\\/\\\/creators.bengo4.com\\\/entry\\\/2025\\\/09\\\/16\\\/080000#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fb2Fbengo42F202509112F20250911104412.pn.png\",\"articleSection\":[\"\u4f01\u696d\u30c6\u30c3\u30af\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/5664\\\/\",\"url\":\"https:\\\/\\\/creators.bengo4.com\\\/entry\\\/2025\\\/09\\\/16\\\/080000\",\"name\":\"Compression Dictionary Transport \u306e PHP \u5b9f\u88c5 - Web\u5727\u7e2e\u306e\u6b21\u4e16\u4ee3\u6280\u8853 - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/creators.bengo4.com\\\/entry\\\/2025\\\/09\\\/16\\\/080000#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/creators.bengo4.com\\\/entry\\\/2025\\\/09\\\/16\\\/080000#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fb2Fbengo42F202509112F20250911104412.pn.png\",\"datePublished\":\"2025-09-15T23:35:05+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/creators.bengo4.com\\\/entry\\\/2025\\\/09\\\/16\\\/080000#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/creators.bengo4.com\\\/entry\\\/2025\\\/09\\\/16\\\/080000\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/creators.bengo4.com\\\/entry\\\/2025\\\/09\\\/16\\\/080000#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fb2Fbengo42F202509112F20250911104412.pn.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fb2Fbengo42F202509112F20250911104412.pn.png\",\"width\":1300,\"height\":683},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/creators.bengo4.com\\\/entry\\\/2025\\\/09\\\/16\\\/080000#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Compression Dictionary Transport \u306e PHP \u5b9f\u88c5 &#8211; Web\u5727\u7e2e\u306e\u6b21\u4e16\u4ee3\u6280\u8853\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Compression Dictionary Transport \u306e PHP \u5b9f\u88c5 - Web\u5727\u7e2e\u306e\u6b21\u4e16\u4ee3\u6280\u8853 - \u30dd\u30b1\u30b3\u30f3","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:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000","og_locale":"ja_JP","og_type":"article","og_title":"Compression Dictionary Transport \u306e PHP \u5b9f\u88c5 - Web\u5727\u7e2e\u306e\u6b21\u4e16\u4ee3\u6280\u8853 - \u30dd\u30b1\u30b3\u30f3","og_description":"\u306f\u3058\u3081\u306b \u73fe\u4ee3\u306e Web \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u304a\u3044\u3066\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306f\u30e6\u30fc\u30b6\u30fc\u4f53\u9a13\u3092\u5de6\u53f3\u3059\u308b\u91cd\u8981\u306a\u8981\u7d20\u3067\u3059\u3002\u3053\u308c\u307e\u3067\u3001gzip\u3001Brotli\u3001Zstandard \u3068\u3044\u3063\u305f\u512a\u308c\u305f\u5727\u7e2e\u6280\u8853\u304c\u3001\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3078\u306e\u30c7\u30fc\u30bf [&hellip;]","og_url":"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-09-15T23:35:05+00:00","og_image":[{"width":1300,"height":683,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fb2Fbengo42F202509112F20250911104412.pn.png","type":"image\/png"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"2\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/5664\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"Compression Dictionary Transport \u306e PHP \u5b9f\u88c5 &#8211; Web\u5727\u7e2e\u306e\u6b21\u4e16\u4ee3\u6280\u8853","datePublished":"2025-09-15T23:35:05+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/5664\/"},"wordCount":145,"image":{"@id":"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fb2Fbengo42F202509112F20250911104412.pn.png","articleSection":["\u4f01\u696d\u30c6\u30c3\u30af"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/5664\/","url":"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000","name":"Compression Dictionary Transport \u306e PHP \u5b9f\u88c5 - Web\u5727\u7e2e\u306e\u6b21\u4e16\u4ee3\u6280\u8853 - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000#primaryimage"},"image":{"@id":"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fb2Fbengo42F202509112F20250911104412.pn.png","datePublished":"2025-09-15T23:35:05+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fb2Fbengo42F202509112F20250911104412.pn.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/https3A2F2Fcdn-ak.f.st-hatena.com2Fimages2Ffotolife2Fb2Fbengo42F202509112F20250911104412.pn.png","width":1300,"height":683},{"@type":"BreadcrumbList","@id":"https:\/\/creators.bengo4.com\/entry\/2025\/09\/16\/080000#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"Compression Dictionary Transport \u306e PHP \u5b9f\u88c5 &#8211; Web\u5727\u7e2e\u306e\u6b21\u4e16\u4ee3\u6280\u8853"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/5664","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=5664"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/5664\/revisions"}],"predecessor-version":[{"id":5666,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/5664\/revisions\/5666"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/5665"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=5664"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=5664"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=5664"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}