HTTP
概述
- HyperText Transfer Protocol:超文本传输协议,工作中应用层,制定了一种网页资源传输标准;
- 传输层基于TCP/80端口进行数据传输;
软件架构
C/S
Client/Server:客户端/服务器 架构
优势
性能高,体验好:客户端可以承担大量运算和图形渲染(如游戏、CAD),响应速度快,界面交互丰富流畅。
可离线操作:核心数据和功能可预装或缓存,在网络不稳定或无网络时仍能进行部分操作(如单据填写、文档编辑)
充分利用本地资源:可以方便地调用本地硬件(如打印机、扫描仪、指纹仪、高精度传感器)
安全性可控:采用自定义的通信协议和加密方式,相对封闭,数据链路控制更强。
劣势
部署和维护成本高:每台客户机都需要安装、配置和升级。
跨平台性差:针对Windows、iOS、Android需要开发不同的客户端,开发成本高
应用场景
- 对性能和界面要求高的专业软件
- 需要频繁使用本地硬件的软件
B/S
- Browser/Server:浏览器/服务器 架构
优势
无需安装,使用便捷:用户只需记住网址或扫码即可使用,极大降低了使用门槛。
维护和升级极其方便:开发者只需更新服务器端程序,所有用户下次访问即是最新版本。
完美的跨平台性:任何有标准浏览器的设备(PC、Mac、Pad、手机、智能电视)均可使用。
劣势
高度依赖网络和服务器:网络质量直接影响体验;服务器宕机,所有用户无法使用
性能和体验存在天花板:受限于浏览器沙盒环境和网络延迟,在复杂图形处理、实时交互上不如原生C/S应用。
本地硬件访问能力弱:出于安全考虑,浏览器对本地硬件(如特定串口设备)的访问权限有严格限制
安全性面临更多挑战:暴露在公共互联网,需应对各种常见的Web攻击
典型应用场景
- 面向广大公众的互联网服务
- 企业协同办公平台
URL
格式
- 协议:确定数据传输标准,常见为http或https;
- 主机:确定目标服务器,一般为IP或域名,
127.0.0.1或localhost代表本机; - 端口号:确定服务器程序,http默认端口为80,https默认端口为443;
- 资源路径:确定目标资源的访问路径,一般为目标资源在服务器程序中的存储路径,如果未指定资源路径,默认访问网站首页(
index) - 附加信息:可选,为客户端发送给服务器无机密性要求的数据;
网站资源
请求与响应
- 请求(reqquest,req):客户端发送给服务器的数据包,该数据包携带了客户端相关信息,用于向服务器索取资源或提交数据到服务器处理;
- 响应(response,resp):服务器发送给客户端的数据包,该数据包携带了服务器相关信息,用于响应对应请求的处理结果;
- HTTP协议规定一个请求只能请求服务的一个资源,请求和响应数据包格式由HTTP协议统一规定;
无状态
- 不支持保存用户状态;
- 可用Cookie和Session技术实现用户状态保存;
明文传输
- 数据在网络中以明文方式传输,容易 造成数据泄露;
请求类型
GET
- 目的:向服务器索取资源的请求;
- 传参方式:以URL传参;(www.new.com:8080/login.html?…)
- 传参大小:收URL总长度限制;
- 安全性:数据会暴露在URL地址,并且历史记录也保留传参数据;
- 浏览器会缓存get响应
POST
- 目的:向服务器发送数据的请求;
- 传参方式:正文传参
- 传参大小:请求正文传参理论上无上限;
- 安全性:正文传参相较URL传参更安全;
GET vs POST 核心对比
| 对比维度 | GET 请求 | POST 请求 |
|---|---|---|
| 核心目的 | 索取资源 - 从服务器获取数据(查询、读取) | 提交数据 - 向服务器发送数据以创建/更新资源 |
| 传参位置 | URL末尾 ?key1=value1&key2=value2 | 主要:请求正文(Body) 也可在URL,但不推荐 |
| 传参可见性 | 完全暴露在地址栏、浏览器历史、服务器日志 | 正文参数不可见于地址栏,更隐蔽 |
| 数据长度限制 | 有,较小 受URL最大长度限制(通常2048字符以内) | 理论上无限制 实际受服务器配置约束 |
| 安全性 | 较低 参数直接暴露,不适合传输敏感信息(密码、密钥) | 相对较高 正文参数不直接暴露,但仍需HTTPS加密 |
| 缓存与书签 | 可缓存、可收藏为书签 | 默认不可缓存、不可收藏 |
| 浏览器历史 | 保留参数 | 不保留正文参数 |
| 主要应用场景 | 搜索、页面跳转、资源下载 | 登录、注册、表单提交、文件上传 |
请求正文(body)
- GET请求无正文;
- POST请求正文为要提交给服务器的数据;
常见的MIME-Type
application/x-www-form-urlencoded(表单)
application/json(JSON)
multipart/form-data; boundary=——WebKitFormBoundaryWJg0B4RuuPnLRQCA
概述
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的标准,用来表示文档、文件或字节流的性质和格式
浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理URL,因此 We b服务器在响应头中添加正确的 MIME 类型非常重要。如果配置不正确,浏览器可能会无法解析文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。
给数据打标签,告知浏览器或应用程序应该如何处理接收到的数据,从而确保文本、图片、视频等不同格式的内容能被正确识别、解析和呈现。
网页基础 (Web Foundations)
这些是构成每个网页的基石。
| MIME 类型 | 文件扩展名 | 用途与说明 |
|---|---|---|
text/html | .html, .htm | 超文本标记语言。所有网页的根基,浏览器会解析并渲染。 |
text/css | .css | 层叠样式表。定义网页的视觉样式和布局。 |
text/javascript application/javascript | .js, .mjs | JavaScript代码。实现网页的动态交互与逻辑。text/javascript 是现代标准。 |
数据交换 (Data Interchange)
API通信和配置的核心格式。
| MIME 类型 | 文件扩展名 | 用途与说明 |
|---|---|---|
application/json | .json | JSON格式数据。现代API前后端通信的事实标准,轻量且结构化。 |
application/xml | .xml | XML格式数据。用于一些传统Web服务、配置文件(如RSS、SOAP)。 |
application/x-www-form-urlencoded | (无) | URL编码的表单数据。HTML表单默认的提交格式(如 name=value&key=value)。 |
multipart/form-data | (无) | 多部分表单数据。HTML表单需要上传文件时必须使用的格式。 |
图像 (Images)
不同格式适用于不同场景。
| MIME 类型 | 文件扩展名 | 用途与说明 |
|---|---|---|
image/jpeg | .jpg, .jpeg | JPEG图像。适用于照片等颜色丰富的图片,有损压缩。 |
image/png | .png | PNG图像。支持透明度,适用于图标、图形,无损压缩。 |
image/gif | .gif | GIF图像。支持简单动画和透明度。 |
应用程序与其他 (Application & Others)
| MIME 类型 | 文件扩展名 | 用途与说明 |
|---|---|---|
application/octet-stream | (任意) | 未知的二进制流。这是浏览器对未知类型文件的默认处理方式,会强制触发下载 |
响应(Response)
HTTP响应状态码
- HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传输协议响应状态的3位数字代码。
常见状态码
- 200:响应成功;
- 301:永久重定向,表示该资源使用了新的资源路径,以后请求该资源都使用新资源路径;
- 302:临时重定向,表示该资源使用了新的资源路径,本次请求使用新资源路径;
- 400:请求报文语法错误,请求数据不符合HTTP协议语法规定;
- 401:当前请求需要用户验证(鉴权);
- 403:服务器拒绝;(缺少权限)
- 404:资源找不到;
- 500:服务器错误,服务器执行目标资源时发生内部错误;
| 状态码 | 优化解释与核心要点 | 典型场景 |
|---|---|---|
| 200 | 请求完全成功。 | 成功加载页面 |
| 301 | 永久重定向。资源已永久移至Location头指定的新URI。浏览器和搜索引擎会更新书签、更新链接指向新地址。 | 网站改版更换域名,旧链接应永久跳转到新位置。 |
| 302 | 临时重定向。资源临时从另一个URI响应。本次请求用新URI,但客户端未来应继续使用原地址。浏览器不会缓存此跳转关系。 | 用户未登录时访问个人中心,临时重定向到登录页。 |
| 304 | 未修改。重要!用于缓存控制。客户端携带缓存标识(如If-Modified-Since)请求,服务器判断资源未变,则返回此码,不包含响应体,告诉客户端“直接用缓存”。 | 刷新页面时,很多静态资源(如图片、CSS)会返回此状态,极大节省带宽。 |
| 400 | 错误的请求。服务器因请求的语法、格式错误而无法理解。这是最笼统的客户端错误。 | 1. 请求体JSON格式错误 2. 缺少必需的参数 3. 参数类型错误。 |
| 401 | 未认证。请求需要用户验证。此状态表示“你是未知用户”,需提供有效身份凭证(如用户名密码、Token)。响应应包含WWW-Authenticate头指导如何认证。 | 1. 访问需要登录的API而未提供登录凭证 2. 凭证已过期。 |
| 403 | 禁止访问。服务器理解请求,但拒绝执行。没有足够的权限访问此资源。 | 1. 普通用户尝试访问管理员后台 2. 访问服务器上禁止读取的系统文件。 |
| 404 | 未找到。服务器找不到请求的资源。也可能是服务器不想告诉你为什么拒绝(出于安全)而返回的通用错误。 | 1. 用户访问了一个已删除或不存在的页面URL 2. 静态资源路径错误。 |
| 429 | 请求过多。重要!客户端在给定时间内发送了过多请求(“限流”或“防刷”)。 | 1. API调用频率超限 2. 短信验证码请求过于频繁。 |
| 500 | 服务器内部错误。最笼统的服务器错误。服务器遇到了一个未曾预料的状况,导致它无法完成对请求的处理。 | 1. 后端代码出现未捕获的异常 2. 数据库连接突然失败。 |
| 502 | 坏网关。作为网关或代理的服务器,从上游服务器接收到无效响应。 | Nginx反向代理的后端应用(如Tomcat)崩溃或无响应。 |
| 503 | 服务不可用。服务器当前无法处理请求(通常是因为过载或停机维护)。通常可配合Retry-After头告知客户端何时重试。 | 1. 服务器正在进行维护 2. 并发用户数达到极限,系统过载。 |
| 504 | 网关超时。作为网关或代理的服务器,未能及时从上游服务器收到响应。 | Nginx在配置的时间内,未收到后端FastCGI(PHP-FPM)或应用服务器的响应。 |