HTTP 会话 | 消息 | MIME类型 02
典型的 HTTP 会话 - HTTP | MDN
1 响应状态码
HTTP 响应状态码 - HTTP | MDN
HTTP 状态响应码用于表示服务器对请求的处理结果,通常分为五大类,以下是常见分类及具体状态码:
1. 信息性响应(1xx)
表示请求已被接收,继续处理:
- 100 Continue:服务器已接收请求头,客户端可继续发送请求体。
- 101 Switching Protocols:服务器同意客户端切换协议(如从 HTTP 切换到 WebSocket)。
2. 成功响应(2xx)
表示请求已成功被服务器接收、理解并处理:
- 200 OK:请求成功,返回对应资源(最常见)。
- 201 Created:请求成功并创建了新资源(如 POST 创建数据)。
- 204 No Content:请求成功,但无返回内容(如 DELETE 删除资源)。
- 206 Partial Content:部分请求成功(用于断点续传,需配合
Range头)。
3. 重定向(3xx)
表示需要客户端进一步操作才能完成请求:
- 301 Moved Permanently:资源永久迁移到新 URL,浏览器会缓存新地址。
- 302 Found:资源临时迁移到新 URL,浏览器不缓存新地址(历史上可能被不当使用,推荐用 307)。
- 304 Not Modified:资源未修改,可使用本地缓存(配合缓存头如
If-Modified-Since)。 - 307 Temporary Redirect:临时重定向,保持请求方法不变(如 POST 请求重定向后仍用 POST)。
- 308 Permanent Redirect:永久重定向,保持请求方法不变。
4. 客户端错误(4xx)
表示请求存在错误,服务器无法处理:
- 400 Bad Request:请求格式错误(如参数无效、JSON 格式错误)。
- 401 Unauthorized:请求需要身份验证(未登录或令牌失效)。
- 403 Forbidden:服务器拒绝请求(已认证但无权限)。
- 404 Not Found:请求的资源不存在。
- 405 Method Not Allowed:请求方法不被允许(如用 POST 访问仅支持 GET 的接口)。
- 408 Request Timeout:服务器等待请求超时。
- 409 Conflict:请求与服务器当前状态冲突(如资源版本冲突)。
- 413 Payload Too Large:请求体过大,服务器拒绝处理。
- 415 Unsupported Media Type:请求体格式不支持(如服务器只接受 JSON,但客户端发了 XML)。
- 429 Too Many Requests:客户端请求过于频繁(限流)。
5. 服务器错误(5xx)
表示服务器处理请求时发生内部错误:
- 500 Internal Server Error:服务器内部未知错误(最常见)。
- 501 Not Implemented:服务器不支持请求的功能(如未实现的方法)。
- 502 Bad Gateway:网关 / 代理服务器收到上游无效响应。
- 503 Service Unavailable:服务器暂时不可用(如维护中)。
- 504 Gateway Timeout:网关 / 代理服务器等待上游响应超时。
- 505 HTTP Version Not Supported:服务器不支持请求的 HTTP 版本。
这些状态码是 HTTP 协议的核心规范,不同场景下使用对应的码可帮助客户端准确理解请求结果。
2 HTTP 消息

1. 什么是 HTTP 消息?
就是客户端(比如你的浏览器)和服务器(比如百度的服务器)之间发的 “信”,分两种:
- 请求(request):你让服务器做事(比如 “给我看看百度首页”)。
- 响应(response):服务器给你的答复(比如 “好的,这是百度首页的内容”)。
2. 它长什么样?
就像写信有 “开头、正文、结尾”,HTTP 消息也有结构:
- 起始行:写清楚 “要干啥”(请求里是 “方法 + 地址”,比如
GET /index.html;响应里是 “状态码”,比如200 OK)。 - 头(Headers):一些额外说明(比如 “我要的是 JSON 格式”“这个内容缓存 1 小时”)。
- 空行:表示 “头说完了”。
- 主体(Body):实际的数据(比如网页内容、JSON 数据)。
3. HTTP/1 和 HTTP/2 的区别
- HTTP/1:消息是 “明文” 的,一行一行能看懂(就像普通书信)。
- HTTP/2:为了更快,把消息拆成 “二进制帧”(就像把信拆成小包裹发,更高效),但对咱们用户是 “透明” 的(不用管它咋拆,浏览器自动处理)。
举个例子(请求 + 响应)
你在浏览器输入https://www.baidu.com(这是请求):
起始行:GET / HTTP/1.1(方法是 GET,地址是/,用 HTTP/1.1 协议)
头:Host: www.baidu.com(告诉服务器 “我要访问百度”)
空行:(一个空行)
主体:(这里请求没数据,所以空着)
服务器给你响应:
起始行:HTTP/1.1 200 OK(协议是 HTTP/1.1,状态码 200 表示成功)
头:Content-Type: text/html(告诉浏览器 “内容是 HTML 网页”)
空行:(一个空行)
主体:(百度首页的 HTML 代码,就是你看到的页面)
--------------------------------------------------------
HTTP消息其实就是 “客户端和服务器聊天的规则”
3 HTTP/2 帧

咱们可以把 “帧机制” 当成HTTP/2 为了让网页加载更快,把消息拆成小包裹传输的 “技巧”。
1. 先看 HTTP/1.x 的 “缺点”(为什么要搞帧机制)
HTTP/1.x 传输消息时,有三个明显的问题:
- 头不压缩:比如每次请求都要带 “
Host: www.xxx.com”“User-Agent: 浏览器型号” 这些头信息,重复传输很浪费流量。 - 头重复传:不同请求的头往往很像(比如都访问同一个网站的资源),但还是得每次都发一遍。
- 不能多路复用:比如你同时加载网页的图片、CSS、JS,HTTP/1.x 得开多个连接,而 “热连接(已建立的连接)” 比 “冷连接(新建立的连接)” 效率低,导致加载慢。
2. HTTP/2 的 “帧机制” 是什么?
简单说,HTTP/2 把原来的 HTTP 消息拆成 “小帧”,再把这些帧塞进 “流(stream)” 里传输,就像把一封长信拆成多个小包裹,通过不同的通道同时发,还能压缩包裹上的 “标签”(头信息)。
具体做了这几件事:
- 拆帧:把 HTTP 消息(请求或响应)分成 “数据帧” 和 “报头帧”。比如一个网页的 HTML 内容是 “数据帧”,它的头信息(比如
Content-Type: text/html)是 “报头帧”。 - 报头压缩:因为头信息经常重复,HTTP/2 会压缩这些头,大幅减少传输量。
- 多路复用:多个 “流” 可以在同一个 TCP 连接里同时传帧。比如你加载图片、CSS、JS 时,它们的帧可以在同一个连接里 “混着传”,不用开多个连接,效率直接拉满。
3. 对我们有什么影响?
帧机制是HTTP/2 底层的优化,对开发者和用户都是 “透明” 的—— 你不用改代码、不用调设置,只要浏览器和服务器都支持 HTTP/2,它就会自动生效,让网页加载更快。
总结一下:帧机制就是 HTTP/2 把消息拆成小帧、压缩头、多路复用的 “黑科技”,核心目的就是让网页加载更高效。
4 为什么web开发者要学习 MIME 类型?

对于 Web 开发者来说,理解 MIME 类型(IANA 媒体类型)非常关键,它直接影响网页的渲染、资源的加载以及用户体验,具体作用可以从以下几个场景来理解:
1. 让浏览器正确识别并渲染资源
浏览器是通过 Content-Type 响应头中的 MIME 类型 来判断 “如何处理这个资源” 的,而不是仅靠文件扩展名。如果 MIME 类型配置错误,浏览器就会 “误解” 资源,导致功能异常。
-
示例 1:网页渲染:如果你开发了一个 HTML 页面,但服务器把它的
Content-Type错误地设置成了text/plain(纯文本类型),那么浏览器会把 HTML 代码当成普通文字显示,而不是渲染成网页。正确的 MIME 类型应该是text/html,这样浏览器才会解析标签、渲染成正常页面。 -
示例 2:图片 / 视频加载:一张 PNG 图片的 MIME 类型是
image/png,如果服务器误设为application/octet-stream(二进制流),浏览器可能会把它当成 “未知文件” 直接下载,而不是在页面中显示。
2. 确保 JavaScript、CSS 等资源正常执行 / 加载
- JavaScript:正确的 MIME 类型是
application/javascript(或text/javascript)。如果配成其他类型,浏览器会拒绝执行这段脚本,导致网页交互功能失效。 - CSS:正确的 MIME 类型是
text/css。如果配错,浏览器不会加载样式,网页会变成 “裸奔” 的无样式状态。
3. 控制文件的下载行为
当用户需要下载文件时,MIME 类型可以决定 “是在浏览器中打开还是直接下载”。
- 例如,一个 PDF 文件的 MIME 类型是
application/pdf:- 如果服务器把
Content-Type设为application/pdf,同时添加Content-Disposition: inline,浏览器会尝试在页面内直接打开 PDF; - 如果设为
application/octet-stream并添加Content-Disposition: attachment; filename="document.pdf",浏览器会直接触发下载。
- 如果服务器把
4. 处理 AJAX 响应与 API 交互
在前后端分离的项目中,后端接口返回的数据(如 JSON、XML)需要通过正确的 MIME 类型让前端识别。
- 例如,后端返回 JSON 数据时,
Content-Type要设为application/json,这样前端用fetch或axios请求时,就能直接通过response.json()解析数据;如果误设为text/plain,前端解析就会出错。
5. 避免安全风险与兼容性问题
- 安全:某些 MIME 类型的错误配置可能被利用为 “攻击入口”。例如,恶意文件如果被错误识别为可执行脚本,可能引发 XSS 等安全问题。
- 兼容性:不同浏览器对 MIME 类型的处理略有差异,正确配置可以避免因浏览器 “误解” 导致的兼容性 Bug。
总结
作为 Web 开发者,掌握 MIME 类型的核心价值是确保 “资源的传输” 与 “浏览器的处理” 完全匹配—— 从网页渲染、脚本执行,到文件下载、API 交互,每一个环节都离不开正确的 MIME 类型配置。如果忽略这一点,即使代码逻辑正确,也可能因为浏览器 “读不懂资源” 而导致整个网站无法正常工作。
简单来说:MIME 类型是 “告诉浏览器如何处理资源” 的 “说明书”,写得对,网页才会按预期运行。
5 对Web 开发者至关重要的 MIME 类型
对 Web 开发者至关重要的 MIME 类型
Web 媒体技术 | MDN


核心:浏览器如何识别不同类型的文件(比如网页、CSS、JS),以及对应的 MIME 类型规则。
一、先理解核心逻辑:MIME 类型是 “文件的身份说明书”
你可以把 MIME 类型想象成 “文件的身份证”—— 浏览器拿到一个文件时,不是看它的后缀名(比如 .html .css),而是看这个 “身份证”(Content-Type 响应头里的 MIME 类型),来决定 “是渲染成网页、还是当成样式加载、还是直接下载”。
二、逐个拆解常见 MIME 类型
1. application/octet-stream → “未知二进制文件,直接下载”
- 场景:服务器给你一个 “不知道是什么类型的二进制文件”(比如一个自定义格式的软件安装包)。
- 效果:浏览器会直接弹出 “另存为” 对话框,让你下载,不会尝试打开或执行。
- 错误案例:如果服务器把一张 PNG 图片的 MIME 类型设成这个,浏览器不会在页面里显示图片,而是让你下载它。
2. text/plain → “纯文本,直接显示内容”
- 场景:服务器给你一个 “普通文本文件”(比如
.txt格式的 README)。 - 效果:浏览器会把文件内容当成普通文字显示在页面上。
- 错误案例:如果服务器把一个 CSS 文件的 MIME 类型设成
text/plain,浏览器会把 CSS 代码当成普通文字显示,而不是用来美化网页(网页会变成 “裸奔” 状态)。
3. text/css → “CSS 样式,用来美化网页”
- 场景:服务器给你一个 CSS 样式文件(比如
style.css)。 - 效果:浏览器会识别为样式文件,加载后给网页加上样式(比如颜色、布局)。
- 错误案例:如果服务器把 CSS 文件的 MIME 类型设成
text/plain,网页会失去所有样式,变得很难看。
4. text/html → “HTML 网页,用来渲染页面”
- 场景:服务器给你一个 HTML 文件(比如
index.html)。 - 效果:浏览器会解析 HTML 标签,渲染成正常的网页(比如按钮、图片、文字排版)。
- 错误案例:如果服务器把 HTML 文件的 MIME 类型设成
text/plain,浏览器会把<div><p>这些标签当成普通文字显示,网页就成了一堆 “代码文本”。
5. text/javascript → “JavaScript 脚本,用来实现交互”
- 场景:服务器给你一个 JS 脚本文件(比如
main.js)。 - 效果:浏览器会执行 JS 代码,实现网页交互(比如点击按钮弹出弹窗、异步加载数据)。
- 错误案例:如果服务器把 JS 文件的 MIME 类型设成其他类型(比如
text/plain),浏览器会拒绝执行这段脚本,网页的交互功能全部失效(比如按钮点了没反应)。
三、总结:为什么开发者要关心这个?
因为MIME 类型配错了,网页会直接 “崩掉”—— 要么样式没了,要么交互坏了,要么文件下错了。
举个真实例子:假设你写了一个很炫酷的网页,里面有 CSS 样式和 JS 交互,但服务器把它们的 MIME 类型都设成了 text/plain:
- CSS 变成 “文字”,网页没样式 → 丑到没法看;
- JS 变成 “文字”,交互全失效 → 按钮点不动、数据加载不了;
- 用户体验直接崩盘,还不知道是 “MIME 类型配错了” 导致的。
所以,作为 Web 开发者,给每个文件配对正确的 MIME 类型,是保证网页 “能看、能交互” 的基础 —— 就像给文件办对了 “身份证”,浏览器才知道怎么 “对待” 它~
以下是整理成表格形式的常用 MIME 类型,清晰直观:
| 类别 | 格式 / 用途 | MIME 类型 |
|---|---|---|
| 文本类 | 普通文本 | text/plain |
| HTML 文件 | text/html | |
| CSS 文件 | text/css | |
| JavaScript 文件 | application/javascript | |
| 图片类 | JPG 图片 | image/jpeg |
| PNG 图片 | image/png | |
| GIF 图片 | image/gif | |
| SVG 图片 | image/svg+xml | |
| WebP 图片 | image/webp | |
| 数据交换类 | JSON 数据 | application/json |
| XML 数据 | application/xml | |
| 表单默认数据 | application/x-www-form-urlencoded | |
| 表单文件上传 | multipart/form-data | |
| 文档类 | PDF 文件 | application/pdf |
| Word 文档(docx) | application/vnd.openxmlformats-officedocument.wordprocessingml.document | |
| Excel 表格(xlsx) | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | |
| 音视频类 | MP3 音频 | audio/mpeg |
| MP4 视频 | video/mp4 | |
| WebM 视频 | video/webm | |
| WAV 音频 | audio/wav | |
| 压缩包类 | ZIP 压缩包 | application/zip |
| 7Z 压缩包 | application/x-7z-compressed | |
| TAR 压缩包 | application/x-tar |
6 MIME 嗅探

MIME 嗅探是浏览器在服务器返回的 MIME 类型缺失或被认为错误时,自行分析资源内容来推测其真实类型的机制。
一、为什么会有 MIME 嗅探?
服务器有时会 “配错 MIME 类型”(比如把 CSS 文件的 Content-Type 设成了 text/plain),或者干脆没设置 MIME 类型。这时候浏览器为了让资源能正常显示,就会自己 “猜” 资源的真实类型 —— 这个 “猜” 的过程就是 MIME 嗅探。
二、MIME 嗅探怎么运作?
浏览器会读取资源的内容特征来判断类型:
- 比如看到资源开头是
<!DOCTYPE html>,就推测是text/html(HTML 网页); - 看到
body { color: red; }这样的代码,就推测是text/css(CSS 样式); - 看到
function test() {}这样的代码,就推测是text/javascript(JS 脚本)。
不同浏览器的嗅探逻辑有差异,比如 Safari 会结合文件扩展名辅助判断。
三、MIME 嗅探的风险
有些 MIME 类型对应的是可执行内容(比如 JS 脚本),如果浏览器嗅探错误,可能导致安全问题:
- 比如恶意文件被错误识别为 JS 并执行,可能引发 XSS 攻击。
四、如何控制 MIME 嗅探?
服务器可以通过发送 X-Content-Type-Options: nosniff 响应头,禁止浏览器进行 MIME 嗅探,强制浏览器只能用服务器指定的 MIME 类型来处理资源。这能避免因嗅探错误导致的安全风险,也是 Web 安全的最佳实践之一。
简单总结:MIME 嗅探是浏览器的 “补救措施”,但有安全风险,所以建议服务器正确配置 MIME 类型,并通过 X-Content-Type-Options 禁止嗅探。
7 数据压缩

1. 作用
数据压缩是提升 Web 站点性能的关键手段,可实现高达 70% 的压缩比率,大幅降低带宽需求,提升页面加载速度。
2. 实现方式
Web 开发者无需手动实现压缩机制,浏览器和服务器已内置支持,但需确保服务器端合理配置。
3. 应用层面
- 文件格式层:特定格式文件(如文本、某些多媒体格式)采用专属优化算法压缩。
- HTTP 协议层:对传输的数据进行通用压缩,以压缩形式实现端到端传输。
- 网络连接层:在 HTTP 连接的两个节点(如客户端与中间代理、代理与服务器)之间进行压缩。
