<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>请求头 on ZiYang FrontEnd Interview</title><link>https://fe-interview.pangcy.cn/tags/%E8%AF%B7%E6%B1%82%E5%A4%B4/</link><description>Recent content in 请求头 on ZiYang FrontEnd Interview</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 06 Mar 2025 13:07:39 +0800</lastBuildDate><atom:link href="https://fe-interview.pangcy.cn/tags/%E8%AF%B7%E6%B1%82%E5%A4%B4/index.xml" rel="self" type="application/rss+xml"/><item><title>常见HTTP请求头作用详解</title><link>https://fe-interview.pangcy.cn/docs/network/network-32/</link><pubDate>Tue, 04 Mar 2025 09:31:00 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/network/network-32/</guid><description>&lt;h2 id="一考察点分析">一、考察点分析 &lt;a href="#%e4%b8%80%e8%80%83%e5%af%9f%e7%82%b9%e5%88%86%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>本题考查候选人三个核心能力维度：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>HTTP协议基础&lt;/strong>：对RFC标准定义的关键请求头的理解深度&lt;/li>
&lt;li>&lt;strong>内容协商机制&lt;/strong>：理解客户端与服务端通过HTTP头进行内容协商的过程&lt;/li>
&lt;li>&lt;strong>实战经验&lt;/strong>：实际开发中对浏览器兼容性和网络优化的处理经验&lt;/li>
&lt;/ol>
&lt;p>具体技术评估点：&lt;/p>
&lt;ul>
&lt;li>常用请求头的适用场景及规范（Accept系列头与Content系列头的对应关系）&lt;/li>
&lt;li>编码协商流程中请求头与响应头的协作机制&lt;/li>
&lt;li>多编码格式的优先级处理及降级方案&lt;/li>
&lt;li>跨浏览器支持的压缩算法选择策略&lt;/li>
&lt;/ul>
&lt;h2 id="二技术解析">二、技术解析 &lt;a href="#%e4%ba%8c%e6%8a%80%e6%9c%af%e8%a7%a3%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="关键知识点优先级">关键知识点优先级 &lt;a href="#%e5%85%b3%e9%94%ae%e7%9f%a5%e8%af%86%e7%82%b9%e4%bc%98%e5%85%88%e7%ba%a7" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>内容协商 &amp;gt; 安全认证 &amp;gt; 数据格式定义&lt;/li>
&lt;li>编码压缩协同 &amp;gt; 浏览器兼容处理&lt;/li>
&lt;/ol>
&lt;h3 id="核心机制剖析">核心机制剖析 &lt;a href="#%e6%a0%b8%e5%bf%83%e6%9c%ba%e5%88%b6%e5%89%96%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>&lt;strong>Accept与Content-Type&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;code>Accept&lt;/code>请求头：客户端声明可处理的MIME类型及优先级（如&lt;code>text/html;q=0.9&lt;/code>）&lt;/li>
&lt;li>&lt;code>Content-Type&lt;/code>实体头：实际传输数据的媒体类型，可出现在请求/响应中&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>编码协商流程&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>客户端通过&lt;code>Accept-Encoding&lt;/code>发送支持的压缩算法列表（如&lt;code>gzip, deflate, br&lt;/code>）&lt;/li>
&lt;li>服务端选择算法后通过&lt;code>Content-Encoding&lt;/code>响应头确认实际使用的压缩方式&lt;/li>
&lt;li>未匹配时服务端应返回未压缩数据（空&lt;code>Content-Encoding&lt;/code>）&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>浏览器兼容陷阱&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>IE11对Brotli(br)编码支持缺失&lt;/li>
&lt;li>移动端设备可能限制特定压缩算法解码能力&lt;/li>
&lt;li>需通过&lt;code>Vary: Accept-Encoding&lt;/code>避免CDN缓存错误版本&lt;/li>
&lt;/ul>
&lt;h2 id="三问题解答">三、问题解答 &lt;a href="#%e4%b8%89%e9%97%ae%e9%a2%98%e8%a7%a3%e7%ad%94" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>&lt;strong>常用请求头作用：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;code>Accept&lt;/code>：声明客户端可解析的响应内容类型（MIME类型），服务端通过它进行内容类型协商&lt;/li>
&lt;li>&lt;code>Content-Type&lt;/code>：标识实际传输数据的媒体类型，请求中用于POST请求体类型，响应中描述返回数据格式&lt;/li>
&lt;li>&lt;code>Authorization&lt;/code>：携带认证凭证（如Bearer Token），用于服务端验证请求权限&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>编码协商机制：&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>客户端在&lt;code>Accept-Encoding&lt;/code>中按优先级列出支持的压缩算法&lt;/li>
&lt;li>服务端选择可用算法压缩响应体，通过&lt;code>Content-Encoding&lt;/code>声明所用算法&lt;/li>
&lt;li>若服务端无法满足请求编码要求，应返回非压缩数据并忽略&lt;code>Content-Encoding&lt;/code>&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>兼容性处理：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>优先使用gzip作为通用压缩方案&lt;/li>
&lt;li>检测User-Agent适配浏览器解码能力&lt;/li>
&lt;li>服务端配置应包含多种压缩算法备选&lt;/li>
&lt;/ul>
&lt;h2 id="四解决方案">四、解决方案 &lt;a href="#%e5%9b%9b%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="服务端配置示例nodejs">服务端配置示例（Node.js） &lt;a href="#%e6%9c%8d%e5%8a%a1%e7%ab%af%e9%85%8d%e7%bd%ae%e7%a4%ba%e4%be%8bnodejs" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>


 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="fb9f20c" class="language-javascript ">
 &lt;code>const zlib = require(&amp;#39;zlib&amp;#39;);
const compression = require(&amp;#39;compression&amp;#39;);

// 中间件配置
app.use(compression({
 filter: (req) =&amp;gt; {
 // 排除特定浏览器不支持的br压缩
 if(req.headers[&amp;#39;user-agent&amp;#39;].includes(&amp;#39;MSIE&amp;#39;)) {
 return [&amp;#39;gzip&amp;#39;, &amp;#39;deflate&amp;#39;];
 }
 return [&amp;#39;br&amp;#39;, &amp;#39;gzip&amp;#39;, &amp;#39;deflate&amp;#39;];
 },
 level: zlib.Z_BEST_COMPRESSION // 最高压缩率
}));

// 响应头设置示例
app.get(&amp;#39;/data&amp;#39;, (req, res) =&amp;gt; {
 res.set(&amp;#39;Vary&amp;#39;, &amp;#39;Accept-Encoding&amp;#39;); // 声明响应差异化因素
 res.json({ data: &amp;#39;compressedContent&amp;#39; });
});&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;h3 id="优化建议">优化建议 &lt;a href="#%e4%bc%98%e5%8c%96%e5%bb%ba%e8%ae%ae" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>动态检测客户端性能：通过&lt;code>Navigator.deviceMemory&lt;/code>判断低端设备禁用高CPU消耗的压缩算法&lt;/li>
&lt;li>静态资源预压缩：构建时生成.gz/.br版本，减少实时压缩开销&lt;/li>
&lt;li>兜底策略：始终保留未压缩版本应对不支持压缩的客户端&lt;/li>
&lt;/ol>
&lt;h2 id="五深度追问">五、深度追问 &lt;a href="#%e4%ba%94%e6%b7%b1%e5%ba%a6%e8%bf%bd%e9%97%ae" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;ol>
&lt;li>
&lt;p>&lt;strong>Q：如何通过Accept-Language实现国际化？&lt;/strong>&lt;/p></description></item></channel></rss>