<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>性能优化 on JiangYM's Blog</title><link>https://jiangym.top/tags/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/</link><description>Recent content from JiangYM's Blog</description><generator>Hugo</generator><language>zh-cn</language><managingEditor>xxx@example.com (JiangYM)</managingEditor><webMaster>xxx@example.com (JiangYM)</webMaster><copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright><lastBuildDate>Wed, 16 Sep 2026 10:30:00 +0800</lastBuildDate><atom:link href="https://jiangym.top/tags/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/index.xml" rel="self" type="application/rss+xml"/><item><title>nginx gzip_types 没配全，JS 文件半年没被压缩</title><link>https://jiangym.top/post/nginx-gzip-js-missing-type/</link><pubDate>Wed, 16 Sep 2026 10:30:00 +0800</pubDate><author>xxx@example.com (JiangYM)</author><guid>https://jiangym.top/post/nginx-gzip-js-missing-type/</guid><description>
<![CDATA[<h1>nginx gzip_types 没配全，JS 文件半年没被压缩</h1><p>作者：JiangYM（xxx@example.com）</p>
        
          <p>今天心血来潮，想看看博客的传输压缩做得怎么样。本来以为一切正常，结果 curl 敲完一看，人有点懵。</p>
<p>先交代下背景。我博客的 nginx 配了 gzip，gzip_types 写了这么一串：</p>
<pre tabindex="0"><code>gzip_types text/plain text/css text/xml text/javascript 
           application/x-javascript application/xml+rss 
           application/json image/svg+xml;
</code></pre><p>看着挺全的吧？HTML 能压、CSS 能压、连 SVG 都写进去了。我用了好几个月都以为万事大吉。</p>
<p>然后今天试了一下：</p>
<pre tabindex="0"><code>curl -sI -H &#34;Accept-Encoding: gzip&#34; https://jiangym.top/js/main.js
</code></pre><p>返回头只有 <code>content-length</code>，没有 <code>content-encoding: gzip</code>。</p>
<p>我不信邪，试了好几个 JS 文件——main.js、pjax_main.js、aos.js——全部没有压缩头，而且 content-length 跟实际文件大小一模一样。比如 main.js 是 5685 bytes，未压缩就是 5685 bytes。</p>
<p>说明啥？说明这些 JS 文件从建站到现在，<strong>一直在裸奔</strong>。</p>
<h2 id="为什么会这样">
<a class="header-anchor" href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e4%bc%9a%e8%bf%99%e6%a0%b7"></a>
为什么会这样？
</h2><p>问题出在 nginx 的 MIME 类型映射上。现代的 nginx 里，<code>.js</code> 文件默认映射的 MIME 类型是 <code>application/javascript</code>，而不是早些年用的 <code>text/javascript</code> 或者 <code>application/x-javascript</code>。</p>
<p>再看我的 gzip_types——</p>
<p>写了 <code>text/javascript</code>，写了 <code>application/x-javascript</code>，就是 <strong>没写 <code>application/javascript</code></strong>。</p>
<p>nginx 的 gzip 模块在判断要不要压缩的时候，是按 <strong>响应的 Content-Type</strong> 匹配的。你配了 text/javascript，但实际返回的是 application/javascript，那对不起，不压缩。</p>
        
        <hr><p>本文2026-09-16首发于<a href='https://jiangym.top/'>JiangYM's Blog</a>，最后修改于2026-09-16</p>]]></description><category>技术</category></item></channel></rss>